сканировать более 10 изображений в одном растровом изображении с помощью ML Kit - PullRequest
0 голосов
/ 26 января 2020

Я использую Firebase Ml Kit на Android (firebase-ml-vision-barcode) для обработки растровых изображений отсканированных студенческих тестов с кодами aztez и qr, на которых много кодов, все работает хорошо, за исключением того, что оно возвращается всегда не более 10 штрих-кодов, даже если на одном растровом изображении имеется 40, есть ли способ изменить параметры детектора, чтобы получить более 10 обнаруженных, или, если это невозможно, есть способ разделить на основе линий на изображении (как видимые в примере ниже коды локализованы в таблице) https://drive.google.com/open?id=1KsvvPtzHDFjsXEgi1yq0pNXwQmtU58Xq ниже функции, которую я использую

закрытые параметры val = FirebaseVisionBarcodeDetectorOptions.Builder () .setBarcodeFormats (FirebaseVisionBarcode.FORMAT_ALL_FORMATS). build ()
частный детектор val = FirebaseVision.getInstance (). getVisionBarcodeDetector (параметры)

/ ** * получить данные, закодированные в штрих-кодах qr-кодах и azte c кодах из pdf данного идентификатора в Google диск и отправляет его в соответствующую электронную таблицу * @param fileId id файла Google Drive (PDF-файл) tha t мы хотим проанализировать * * / приостановить веселье getDataFromPDFInGdrive (fileId: String) {println ("getDataFromPDFInGdrive $ fileId") managePDF.pdfToBitmaps (fileId) {bitMap -> val image = FirebaseVisionImage.fMideDite (изображение) .addOnSuccessListener {штрих-коды -> GlobalScope.launch {analysisBarcodeData (штрих-коды)}}}}

1 Ответ

0 голосов
/ 08 марта 2020

Я наконец-то понял это. Я рисую черные квадраты на растровом изображении, каждый раз, когда мл-комплект находит азте c -код на растровом изображении в координатах, заданных набором firebase ml, и затем повторяю процесс

      /**
     * recurrently analyzes the data from  the bitmap  it first checks weather we have any codes in bitmap if we have it adds them to result
     * then it invokes function that paints black squere in position of the code and scans it one more time
     * - it is a workaround for limitation of ma kit that it enables to scan no more than 10 picture at a time
     * */
    tailrec  suspend fun getAllCodes (
        bitMap: Bitmap,
        listPrim: List<FirebaseVisionBarcode>,
        canvas: Canvas
    ) : List<FirebaseVisionBarcode>  {
        val newList = fromBitMapToBarcodeImages (bitMap)
        addBlackSquareInCodePlace(bitMap,newList,canvas)

if (newList.isEmpty()) {
    return listPrim.union(newList).toList()
}
 //executed if new list is not empty

    return  getAllCodes (bitMap, listPrim.union(newList).toList(),canvas)
    }


    /**
     *adds a black square in place of a scanned code and  gives back midified bitmap
     * */
suspend fun addBlackSquareInCodePlace(
        bitMap: Bitmap,
        listOfBarCodeData: List<FirebaseVisionBarcode>,
        canvas: Canvas
    ) : Bitmap{
        pushBitmapToDrive(bitMap,"aswa"+ listOfBarCodeData.size,"1r6peFVJfcXM0KCDJUt-_QNP_RS8JAl65")

        listOfBarCodeData.forEach {
            it.boundingBox?.let { it1 -> canvas.drawRect(it1,paint) };
        }
        return bitMap

    }
.
...