Windows Phone / Microsoft Tag Scanning SDK

в 8:06, , рубрики: Новости, метки:

Всем доброго времени суток.
В январе Microsoft выпустили Tag Scanning SDK для Windows Phone 7 и мне уже посчастливилось работать с ним. О возможностях, ограничениях и специфичных моментах и будет этот пост.
Описание Microsoft Tag

На Хабре был пост , в котором рассказывалось об этой технологии. Еcли кратко, то — это двумерный цветной штрихкод (High Capacity Color Barcode — HCCB), разработанный Microsoft. Был специально разработан для распознавания при помощи фотокамер, встроенных в мобильные телефоны. Предназначен для быстрой идентификации и получения на устройство заранее подготовленной информации, привязанной к коду и хранящейся на сервере компании Microsoft (из Wikipedia).
Об его преимуществах и недостатках можно прочитать в Интернете, но главным отличием является необходимость подключения к серверу Microsoft.
Начало разработки

Помимо стандартных средств для разработки под Windows Phone 7 потребуется скачать SDK и получить ключ для работы. Ключи бывают 2-х видов: trial и for commercial purpose.
Trial:Для разработки и тестирование приложений

Максимом 100 сканирований в день

Associated payload недоступен

Commercial:Для публикации приложений

Нет ограничений на количество сканирований

Associated payload — специальный идентификатор, связанный с конкретным приложением (тип String, максимальная длина 2048 символов). Своего рода идентификатор, который потом можно использовать.
Чтобы получить trial-key, нужно зайти в Key Manager, используя Live ID, где вы сможете также скачать SDK.
Чтобы получить commercial-key, нужно написать Microsoft Tag Team письмо с описанием приложения.
На момент публикации версия SDK — 7832. Надеюсь, появятся новые версии, где функционал будет доведён до уровня других платформ.
Здесь хотел бы сделать отступление…
История SDK

Изначально, SDK была доступна на 2-х системах: iOS и Android. Это обусловлен тем, что класс необходимый для работы с камерой в Windows Phone 7 появился только в последней версии (Mango, 7.5). Это класс PhotoCamera. Он предоставляет базовый функционал для работы с камерой (основной и фронтальной). Чтобы пользователь мог в реальном времени следить за получаемым изображением и уменьшить количество неудачных распознаваний (Каждый раз пользователь запускал бы Camera Task и, только после этого, распознавалось бы изображение).
Состав SDK
Microsoft.Tag.Core.dll — основная DLL

CHM-документация

Обзор SDK для Mango

Пример

Алгоритм распознавание на клиентской стороне

1) Инициализируется объект PhotoCamera (при навигации на страницу — OnNavigatedTo)
2) Получение изображения
3) Сканирование изображения
4) Попытка распознавания
5) Запуск вывода результата (LaunchExperience)
6) Очистка ресурсов и объектов (при навигации со страницы — OnNavigatingFrom)
Этот алгоритм взят из примера, но есть некоторые моменты, которые следует знать:В примере отсутствует метод InitializeTagSdk, в котром вы указываете ваш ключ. Его можно взять из Обзора (Microsoft Tag Scanning SDK Overview Mango.pdf)

В комментариях к методу получения изображения (GetImageAndDecode) указано, что лучше (читай — обязательно) нужно убрать фокусировку в другой метод или привязать к другому событию, т.к. вызов будет происходить слишком часто. Первый раз при запуске даже слегка пугает, что происходит с камерой. В своём приложении я перенёс фокусировку на события при нажатие на экран, но можно воспользоваться классом CameraButtons для привязки к физической кнопке телефона

И продолжая тему фокусировки, логично сканировать изображение после фокусировки, а не всё время. Вызов GetImageAndDecode переносится сразу после вызова фокусировки.

Вызов вывода результата из истории происходит на другой странице. Это сделано потому, что при изначальном алгоритме (когда сканирование изображения происходит постоянно) не происходит распараллеливания задач. То есть, можно либо пытаться распознать картинку, либо вызвать результат из истории. В случае, когда сканирование происходит после фокусировки — это уже исправлено.

Так как инициализация происходит при OnNavigatedTo, если вы используете MVVM-шаблон, то могут быть некоторые трудности. Всё решается написанием вспомогательных классов или же просто обращению к DataContext, но всё же…

Ещё к этому списку можно добавить отсутствие offline-вызова, который есть в версиях для других платформ (Android, например). Это позволяет загружать результат без сканирования, просто указывая идентификатор. Думаю, в следующей версии это исправят.
Так же есть некоторые ограничения на тип создаваемых приложений. С ним можно ознакомиться в описании Scanning SDK. Основное: нельзя создать мультиформатный сканер кодов.
Справочные материалы:Microsoft Tag Scanning SDK OverviewMicrosoft Tag Application RequirementsTerms and Agreements for Tag SDKMicrosoft Tag — Описание в Wikipedia

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js