Бета-версия ML Kit позволяет разработчикам мобильных приложений использовать опыт машинного обучения Google в мощном и простом в использовании пакете. Мы можем использовать базовые API-интерфейсы базового MLKit или запускать собственные модели, чтобы добавлять в приложения возможности машинного обучения онлайн / офлайн.

Базовые API доступны (по состоянию на 17 августа 2018 г.) для следующих задач:

  1. Маркировка изображений

Рассмотрены варианты использования, связанные с идентификацией объектов, местоположений, занятий, видов животных и т. Д. Использование на устройстве бесплатное и поддерживает около 400+ часто используемых этикеток. Облачная версия обеспечивает бесплатное использование до 1000 функций в месяц и предоставляет более 10 тысяч этикеток. Сеть знаний Поддержка Entity ID доступна как на устройстве, так и в облачной версии. Подробнее о ценах можно узнать здесь. Ознакомьтесь с образцами этикеток и образцом здесь

2. OCR или Распознавание текста

Рассмотрены варианты использования, такие как сканирование номеров кредитных карт, визитных карточек и т. Д. Приложения могут добавить эту функцию для автоматизации многих задач по вводу данных. Или мы можем создать приложения AR, которые будут читать текст из прямой трансляции с камеры и отображать информацию, выполняя вызов API к базе данных с предварительно заполненной информацией. Например, чтобы получить информацию о расписании рейсов / прибытии / отправлении рейсов или поездов, отсканировав бумажный или электронный билет. Облачная версия предлагает идентификацию текста на широком спектре языков, а также извлечение текста из документов. Пример кода оформления заказа на распознавание текста на изображениях здесь

"Потерять его! »- приложение № 12 в iTunes в категории Здоровье и фитнес (рейтинг 4,7, более 161,3 тыс. Оценок) по состоянию на 17 августа 2018 г. использует API для сканирования этикеток пищевых продуктов. Приложение на Android скачали более 10 миллионов раз.

3. Распознавание лиц (не распознавание лиц)

Используя этот базовый API, мы можем рассматривать случаи использования, связанные с обнаружением лиц и ориентиров на лицах (нос, глаза и т. Д.). Представьте, что вы создаете собственный фильтр, например, для снэпчата, или разрабатываете приложение, которое оценивает людей на основе некоторых показателей, связанных с лицевыми ориентирами. Распознавание лиц также работает для прямой трансляции - создайте приложение, которое открывает ворота, только если вы улыбаетесь!

4. Сканирование штрих-кода.

API сканирования штрих-кода предоставляет возможность считывать данные с использованием большинства стандартных штрих-кодов. Поддерживаются следующие штрих-коды:

  • Линейные форматы: Codabar, Code 39, Code 93, Code 128, EAN-8, EAN-13, ITF, UPC-A, UPC-E
  • 2D-форматы: Aztec, Data Matrix, PDF417, QR Code

5. Обнаружение ориентира

Используя этот API, мы можем обнаруживать хорошо известные ориентиры на изображении. Помимо имени и географических координат, мы получаем ряд других деталей, таких как похожие изображения и прочее. Ниже приведены подробности, полученные с использованием фотографии моста Золотые Ворота.

Вот ответ в формате json, который мы получаем от API.

{
  "landmarkAnnotations": [
    {
      "mid": "/m/035p3",
      "description": "Golden Gate Bridge",
      "score": 0.35074955,
      "boundingPoly": {
        "vertices": [
          {
            "x": 287,
            "y": 169
          },
          {
            "x": 607,
            "y": 169
          },
          {
            "x": 607,
            "y": 318
          },
          {
            "x": 287,
            "y": 318
          }
        ]
      },
      "locations": [
        {
          "latLng": {
            "latitude": 37.810868,
            "longitude": -122.476272
          }
        }
      ]
    },
    {
      "mid": "/m/035p3",
      "description": "Golden Gate Bridge",
      "score": 0.3461872,
      "boundingPoly": {
        "vertices": [
          {
            "x": 79,
            "y": 157
          },
          {
            "x": 299,
            "y": 157
          },
          {
            "x": 299,
            "y": 287
          },
          {
            "x": 79,
            "y": 287
          }
        ]
      },
      "locations": [
        {
          "latLng": {
            "latitude": 37.811013,
            "longitude": -122.477801
          }
        }
      ]
    }
  ],
  "labelAnnotations": [
    {
      "mid": "/m/015kr",
      "description": "bridge",
      "score": 0.9573081,
      "topicality": 0.9573081
    },
    {
      "mid": "/m/01bqvp",
      "description": "sky",
      "score": 0.9408597,
      "topicality": 0.9408597
    },
    {
      "mid": "/m/0csby",
      "description": "cloud",
      "score": 0.88219845,
      "topicality": 0.88219845
    },
    {
      "mid": "/m/01b2w5",
      "description": "sunset",
      "score": 0.87522304,
      "topicality": 0.87522304
    },
    {
      "mid": "/m/0d1n2",
      "description": "horizon",
      "score": 0.8456816,
      "topicality": 0.8456816
    },
    {
      "mid": "/m/06npx",
      "description": "sea",
      "score": 0.84551364,
      "topicality": 0.84551364
    },
    {
      "mid": "/m/051gs3",
      "description": "fixed link",
      "score": 0.813437,
      "topicality": 0.813437
    },
    {
      "mid": "/m/0csy8",
      "description": "suspension bridge",
      "score": 0.7733133,
      "topicality": 0.7733133
    },
    {
      "mid": "/m/01b3l7",
      "description": "dusk",
      "score": 0.7567896,
      "topicality": 0.7567896
    },
    {
      "mid": "/m/06cnp",
      "description": "river",
      "score": 0.75497615,
      "topicality": 0.75497615
    },
    {
      "mid": "/m/01b3kg",
      "description": "dawn",
      "score": 0.7400379,
      "topicality": 0.7400379
    },
    {
      "mid": "/m/0838f",
      "description": "water",
      "score": 0.7339397,
      "topicality": 0.7339397
    },
    {
      "mid": "/m/02_ktj",
      "description": "morning",
      "score": 0.7337289,
      "topicality": 0.7337289
    },
    {
      "mid": "/m/01b2q6",
      "description": "sunrise",
      "score": 0.73126,
      "topicality": 0.73126
    },
    {
      "mid": "/m/02l215",
      "description": "reflection",
      "score": 0.713901,
      "topicality": 0.713901
    },
    {
      "mid": "/m/026fm63",
      "description": "calm",
      "score": 0.70837736,
      "topicality": 0.70837736
    },
    {
      "mid": "/m/04mx32",
      "description": "evening",
      "score": 0.7023143,
      "topicality": 0.7023143
    },
    {
      "mid": "/m/013vs",
      "description": "afterglow",
      "score": 0.6465814,
      "topicality": 0.6465814
    },
    {
      "mid": "/m/05kq4",
      "description": "ocean",
      "score": 0.6145469,
      "topicality": 0.6145469
    },
    {
      "mid": "/m/0157l1",
      "description": "cable stayed bridge",
      "score": 0.5945261,
      "topicality": 0.5945261
    },
    {
      "mid": "/g/11k2xz7mr",
      "description": "meteorological phenomenon",
      "score": 0.5603266,
      "topicality": 0.5603266
    },
    {
      "mid": "/m/04p25",
      "description": "loch",
      "score": 0.54516745,
      "topicality": 0.54516745
    },
    {
      "mid": "/m/09wdrl",
      "description": "extradosed bridge",
      "score": 0.5216861,
      "topicality": 0.5216861
    }
  ],
  "safeSearchAnnotation": {
    "adult": "VERY_UNLIKELY",
    "spoof": "VERY_UNLIKELY",
    "medical": "VERY_UNLIKELY",
    "violence": "VERY_UNLIKELY",
    "racy": "VERY_UNLIKELY"
  },
  "imagePropertiesAnnotation": {
    "dominantColors": {
      "colors": [
        {
          "color": {
            "red": 55,
            "green": 44,
            "blue": 40
          },
          "score": 0.1882846,
          "pixelFraction": 0.116575204
        },
        {
          "color": {
            "red": 131,
            "green": 106,
            "blue": 103
          },
          "score": 0.016361877,
          "pixelFraction": 0.010496031
        },
        {
          "color": {
            "red": 218,
            "green": 195,
            "blue": 172
          },
          "score": 0.009196449,
          "pixelFraction": 0.016569875
        },
        {
          "color": {
            "red": 253,
            "green": 204,
            "blue": 114
          },
          "score": 0.004897723,
          "pixelFraction": 0.0041025095
        },
        {
          "color": {
            "red": 35,
            "green": 27,
            "blue": 23
          },
          "score": 0.15742785,
          "pixelFraction": 0.10160371
        },
        {
          "color": {
            "red": 68,
            "green": 49,
            "blue": 36
          },
          "score": 0.1535307,
          "pixelFraction": 0.0701689
        },
        {
          "color": {
            "red": 99,
            "green": 86,
            "blue": 90
          },
          "score": 0.1457985,
          "pixelFraction": 0.08300922
        },
        {
          "color": {
            "red": 75,
            "green": 46,
            "blue": 32
          },
          "score": 0.06324315,
          "pixelFraction": 0.032020885
        },
        {
          "color": {
            "red": 102,
            "green": 72,
            "blue": 55
          },
          "score": 0.049987912,
          "pixelFraction": 0.09126752
        },
        {
          "color": {
            "red": 97,
            "green": 75,
            "blue": 59
          },
          "score": 0.036990125,
          "pixelFraction": 0.023975704
        }
      ]
    }
  },
  "cropHintsAnnotation": {
    "cropHints": [
      {
        "boundingPoly": {
          "vertices": [
            {
              "x": 50
            },
            {
              "x": 562
            },
            {
              "x": 562,
              "y": 639
            },
            {
              "x": 50,
              "y": 639
            }
          ]
        },
        "confidence": 0.79999995,
        "importanceFraction": 0.83
      },
      {
        "boundingPoly": {
          "vertices": [
            {},
            {
              "x": 639
            },
            {
              "x": 639,
              "y": 639
            },
            {
              "y": 639
            }
          ]
        },
        "confidence": 0.79999995,
        "importanceFraction": 1
      },
      {
        "boundingPoly": {
          "vertices": [
            {},
            {
              "x": 639
            },
            {
              "x": 639,
              "y": 536
            },
            {
              "y": 536
            }
          ]
        },
        "confidence": 0.79999995,
        "importanceFraction": 0.83
      }
    ]
  },
  "webDetection": {
    "webEntities": [
      {
        "entityId": "/m/051gs3",
        "score": 0.8717412,
        "description": "Bridge–tunnel"
      },
      {
        "entityId": "/m/035p3",
        "score": 0.83145,
        "description": "Golden Gate Bridge"
      },
      {
        "entityId": "/m/0157l1",
        "score": 0.59367347,
        "description": "Cable-stayed bridge"
      },
      {
        "entityId": "/m/015kr",
        "score": 0.5786,
        "description": "Bridge"
      },
      {
        "entityId": "/m/0csy8",
        "score": 0.5603842,
        "description": "Suspension bridge"
      },
      {
        "entityId": "/m/06npx",
        "score": 0.5181158,
        "description": "Sea"
      },
      {
        "entityId": "/m/09wdrl",
        "score": 0.44899777,
        "description": "Extradosed bridge"
      },
      {
        "entityId": "/m/0bmz2",
        "score": 0.2979,
        "description": "Electrical cable"
      },
      {
        "entityId": "/m/03p1p8r",
        "score": 0.2936,
        "description": "Sky plc"
      }
    ],
    "visuallySimilarImages": [
      {
        "url": "https://www.videvo.net/videvo_files/images/preview_161022_077_SanFrancisco_4K.jpg"
      },
      {
        "url": "https://thumbs.dreamstime.com/b/sailboat-golden-gate-bridge-sunset-clouds-sailboat-golden-gate-bridge-sunset-colorful-wispy-clouds-107643862.jpg"
      },
      {
        "url": "https://d2v9y0dukr6mq2.cloudfront.net/video/thumbnail/S_-0n06Vipfunqrp/san-francisco-bay-golden-gate-golden-gate-bridge-at-sunset-golden-gate-bridge-over-san-francisco-bay_rpeotwkcl__S0000.jpg"
      },
      {
        "url": "https://i.pinimg.com/236x/41/26/89/412689698db67e9d6c970ff9afe2f7eb--golden-gate-bridge-vin.jpg"
      },
      {
        "url": "http://goldengate.org/exhibits/images/GGB-exhibit2-4_5.jpg"
      },
      {
        "url": "http://c1.peakpx.com/wallpaper/721/408/35/golden-gate-bridge-sunset-wallpaper.jpg"
      },
      {
        "url": "https://media-cdn.tripadvisor.com/media/photo-s/05/5f/22/e0/blazing-saddles.jpg"
      },
      {
        "url": "https://thumbs.dreamstime.com/b/golden-gate-bridge-sunrise-san-francisco-beach-california-60924538.jpg"
      },
      {
        "url": "https://d2v9y0dukr6mq2.cloudfront.net/video/thumbnail/pbJRSBz/the-golden-gate-bridge-sunset_4jiio98lg__S0000.jpg"
      },
      {
        "url": "http://footage.framepool.com/shotimg/qf/909179899-san-francisco-bay-golden-gate-strait-golden-gate-bridge-pacific-coast.jpg"
      },
      {
        "url": "https://us.123rf.com/450wm/kitleong/kitleong1509/kitleong150900270/45116349-golden-gate-bridge-sfo-sun-raise.jpg?ver=6"
      },
      {
        "url": "https://i.dailymail.co.uk/i/pix/2014/03/16/article-0-1C585E9A00000578-390_634x422.jpg"
      },
      {
        "url": "http://media6.trover.com/T/58c4309010b26810ab02f909/fixedw_large_4x.jpg"
      },
      {
        "url": "https://n7tpw52zdt-flywheel.netdna-ssl.com/wp-content/uploads/2017/05/san-francisco-golden-gate-bridge-8.jpg"
      },
      {
        "url": "http://rubinweddings.com/wp-content/uploads/2016/04/San-Francisco-and-Golden-Gate-Bridge-Engagement-Session-0016.jpg"
      },
      {
        "url": "https://static1.squarespace.com/static/5935836e5016e13ecccd943e/5986791837c5815a82171acc/598679184c0dbf1460634378/1501985450661/IMG_1712-1.jpg"
      }
    ],
    "bestGuessLabels": [
      {
        "label": "golden gate bridge",
        "languageCode": "en"
      }
    ]
  }
}

Ожидается, что в течение следующих нескольких лет в комплект будут добавлены многие другие базовые API, такие как Smart Reply (для предоставления предлагаемого фрагмента текста, соответствующего контексту).

В дополнение к базовым API мы можем загружать наши собственные модели TensorFlow Lite, которые затем могут быть представлены как API через ML Kit.

Ссылки:

[1] Веб-сайт ML Kit

[2] CodeLabs MLKit-Android

Дополнительная информация:

[1] Использование кастомных моделей с MLKit

[2] Быстрый запуск MLKit

Об авторе

Арпит - опытный технолог с большим опытом руководства различными технологическими командами. Arpit также консультирует клиентов по анализу конкурентного рынка, определению MVP, идеям продукта, монетизации продукта и стратегиям реализации.

Arpit также заинтересован в начальных инвестициях в стартапы в области дизайна и моды, финансов, возобновляемых источников энергии, космоса, недвижимости, производства.

Arpit считает, что мы все должны вносить свой вклад в жизнь общества. Он поставил цели социальной работы в пяти основных областях. Вы можете узнать больше об этом в его сообщении в блоге Творите добро вместе на Tumblr ». Arpit заинтересован в работе с людьми, которые хотят способствовать достижению тех же целей.

Вы можете подписаться на Arpit в Linkedin или Twitter.

ABC. Всегда хлопай в ладоши.