1. 程式人生 > >應用中的影象識別:為什麼以及如何使用

應用中的影象識別:為什麼以及如何使用

目錄

介紹

背景

Firebase ML Kit是什麼及它如何工作

如何將影象識別整合到應用程式中

讓我們總結一下


為什麼以及如何在應用中使用影象識別

介紹

從旅遊到物流,從醫療保健到電子商務,影象識別現在越來越常用。仍然認為這些技術僅適用於大玩家?閱讀如何通過幾個簡單的步驟將其實現到您的應用程式中。

背景

影象識別技術在我們的日常生活中越來越常用。公司和企業用它來解決從安全到客戶滿意度調查的各種問題。對具有影象識別功能的產品的投資預計2021年將增長390億美元

機器學習(影象識別的核心)的實現在從頭開始引入時可能會變得麻煩。幸運的是,有一些公共庫允許在開發產品時使用現成的模型。

Firebase ML Kit就是其中之一。接下來,我們將告訴您如何在應用程式開發中使用它。

Firebase ML Kit是什麼及它如何工作

ML KitSDK,它允許以簡單的方式使用現成的機器學習谷歌對iOSAndroid的解決方案。無論您是否具有機器學習應用程式的經驗,您都可以在幾行程式碼中實現必要的功能。如果您是一位經驗豐富的程式設計師,您可以下載自己的TensorFlow模型。

ML Kit可以線上工作(在這種情況下,您可以免費訪問更大的資料庫,但查詢數量有限:只有前幾千個免費)和離線工作。文字,條形碼和影象識別等功能可線上和離線使用。地標識別(知名建築,河流,街道等)僅可線上獲取,並且只能通過裝置離線識別。

如何將影象識別整合到應用程式中

舉個例子,讓我們從離線文字識別開始:

private fun runTextSearchOnDevice(bitmap: Bitmap) {
        val image = FirebaseVisionImage.fromBitmap(bitmap)
        val textDetector = FirebaseVision.getInstance().onDeviceTextRecognizer
        textDetector.processImage(image).addOnSuccessListener {
            processTextSearchFromDevice(it)
        }.addOnFailureListener {
            Toast.makeText(this, it.toString(), Toast.LENGTH_SHORT).show()
        }
    }

processTextSearchFromDevice`方法中,我們處理Firebase提供的資料。每個功能對應不同型別的模型,可以在文件中找到。在我們的例子中,我們得到了Rect`物件中文字座標的物件陣列,當然還有Firebase識別的文字本身。對於線上使用,程式碼幾乎相同:

val options = FirebaseVisionCloudTextRecognizerOptions.Builder()
          .setLanguageHints(resources.getStringArray(R.array.textRecognitionLanguages).toList())
               .build()
       val textDetector = FirebaseVision.getInstance().getCloudTextRecognizer(options)

現在,我們可以新增可能會被Firebase識別的語言。結果,我們得到了相同的物件陣列。如果您計劃識別文件,為方便起見,您可以使用getCloudDocumentTextRecognizer`

對於人臉識別,方法幾乎相同。

val image = FirebaseVisionImage.fromBitmap(bitmap)
        val faceDetector = FirebaseVision.getInstance().getVisionFaceDetector(getFaceDetectorOptions())
        faceDetector.detectInImage(image).addOnSuccessListener {...}

在設定中,我們可以提到我們是否需要識別地標(眼睛,鼻子,耳朵等),型別(對我們來說,速度或準確度可能很重要),按類別分類,例如,只有睜開眼睛或微笑的照片。以下是設定示例:

FirebaseVisionFaceDetectorOptions.Builder()
            .setModeType(FirebaseVisionFaceDetectorOptions.ACCURATE_MODE)
            .setLandmarkType(FirebaseVisionFaceDetectorOptions.NO_LANDMARKS)
            .setClassificationType(FirebaseVisionFaceDetectorOptions.NO_CLASSIFICATIONS)
            .build()

因此,Firebase將生成一組具有分組面座標的物件,如果有批准,則生成帶有座標的地標陣列。

最後,讓我們討論如何識別照片影象。一般來說,一切都與以前的情況幾乎相同。例如,在這裡,它如何離線工作:

val labelDetector = FirebaseVision.getInstance().visionLabelDetector
        labelDetector.detectInImage(image).addOnSuccessListener {...}

這是一個線上變體:

val options = FirebaseVisionCloudDetectorOptions.Builder()
               .setModelType(FirebaseVisionCloudDetectorOptions.LATEST_MODEL)
               .setMaxResults(15)
               .build()
       val labelDetector = FirebaseVision.getInstance().getVisionCloudLabelDetector(options)
       labelDetector.detectInImage(image).addOnSuccessListener {...}

在設定中,您可以提及顯示的結果的最大值和應該應用的模型(穩定的或最新的可用)。因此,您會收到帶有名稱的物件陣列(取決於Firebase在照片中看到的內容),精確度介於0.011.0之間。

正如您所看到的,沒有複雜性,對於大多數情況下,免費(本地)ML Kit就足夠了。

讓我們總結一下

特別是機器學習和影象識別,不一定非同尋常。例如,在您的應用中,當用戶在註冊時新增照片時,可以在此階段使用它。您所需要的只是檢查圖片是否合適——至少如果它不是使用者寵物的影象。並且客戶希望儘快開始使用您的產品,並且不想等待稽核人批准照片。

 

原文地址:https://www.codeproject.com/Articles/1272374/Image-Recognition-in-Apps-Why-and-How-to-Use