Ejemplo n.º 1
0
    def fromJSON( self,\
                  strParse ):
        size = len(strParse)
        for item in strParse:
            scanResult = ScanResult()
            #большой код
            bigQRCodeData = BigQRCodeData()
            bigQRCodeData.setDataFromJSON(item["m_BigQRCodeData"])
            scanResult.setBigQRCodeData(bigQRCodeData)
            scanResult.setIdToken(item["m_IdToken"])
            scanResult.setStatus(item["m_Status"])

            #маленькие коды парсим
            smallQRCodeList = item["m_SmallQRCodeDataList"]
            for smallQRCode in smallQRCodeList:
                smallQRCodeData = SmallQRCodeData()
                smallQRCodeData.setData(smallQRCode["m_Title"])
                lst = []
                lst = smallQRCode["m_ResultList"]
                smallQRCodeData.setResultList(lst)
                scanResult.addSmallQRCodeData(smallQRCodeData)

            self.m_ScanResultList.append(scanResult)
 def fromJSON( self,\
               strParse ):
     size = len(strParse)
     for item in strParse:
         scanResult = ScanResult()
         #большой код
         bigQRCodeData = BigQRCodeData()
         bigQRCodeData.setDataFromJSON( item["m_BigQRCodeData"] )
         scanResult.setBigQRCodeData(bigQRCodeData)
         scanResult.setIdToken( item["m_IdToken"] )
         scanResult.setStatus(item["m_Status"])
         
         #маленькие коды парсим
         smallQRCodeList = item["m_SmallQRCodeDataList"]
         for smallQRCode in smallQRCodeList:
             smallQRCodeData = SmallQRCodeData()
             smallQRCodeData.setData(smallQRCode["m_Title"])
             lst = []
             lst = smallQRCode["m_ResultList"]
             smallQRCodeData.setResultList(lst)
             scanResult.addSmallQRCodeData(smallQRCodeData)
         
         self.m_ScanResultList.append(scanResult)
Ejemplo n.º 3
0
def startScan( sourceImage,\
               idToken ):

        imageWorker = ImageWorker( sourceImage,\
                                   PIL_IMAGE )
        
        # Заносим информацию о том, что распознавание НАЧАЛОСЬ
        # также, создаем объект scanResult, который будет содержать в себе
        # всю информацию по результату распознавания

        try:
                tokenFileWorker = TokenFileWorker()
                scanResult = ScanResult()
                scanResult.setIdToken( idToken )
                scanResult.setStatus( IN_PROGRESS )
                tokenFileWorker.setScanResult( scanResult )



                #ВАРИАНТ ГРУБОЙ СИЛЫ
                coordinateOfQRCode, imageWorker, symData = thirdVariantOfAlgorithm( imageWorker )

                #sourceImage.save( "check1.png" )
                #coordinateOfQRCode, sourceImage, symData = thirdVariantOfAlgorithm( sourceImage, \
                #                                                                    WAS_ROTATED )
                sourceImage = imageWorker.getPILImage()
                #sourceImage.save( "OnlyForm.jpg" )
                
                #sourceImage.save( "check.png" )
                if ( len( coordinateOfQRCode ) > 0 ):
                        
                        bootomLeftCorners = coordinateOfQRCode[ 1 ]
                        bottomRightCorners = coordinateOfQRCode[ 2 ]
                        start_x = bottomRightCorners[ x ] - int ( ( bottomRightCorners[ x ] - bootomLeftCorners[ x ]  ) / 2 )
                        start_y = bottomRightCorners[ y ]
                        listOfQRCodes, dataList = findAllQRCodeOnColumn( imageWorker, start_x, start_y )

                        
                        if ( len ( listOfQRCodes ) > 0 ):
                                #выводим и записываем большой QR
                                bigQRCodeData = BigQRCodeData()
                                bigQRCodeData.parseDataFromStr( str( symData ) )
                                scanResult.setBigQRCodeData( bigQRCodeData )
                                sys.stdout.write( str( symData ) + "\n" )
                                #print( symData )
                                #начинаем вырезать ячейки по каждому коду

                                for i in range( 0, int( len( listOfQRCodes) / 2 ) ):
                                        
                                        #print( dataList[ i ] )
                                        smallQRCodeData = SmallQRCodeData()
                                        smallQRCodeData.setData( str( dataList[ i ] ) )
                                        sys.stdout.write( str( dataList[ i ] ) + "\n" ) 
                                        listOfResult = []
                                        #fileNameImageWithCells = FOLDER_IMAGE_WITH_CELLS + \
                                        #                         str( i ) + \
                                        #                         IMAGE_FILENAME_IMAGE_WITH_CELLS
                        
                                        imgWithCells = getImageWithCells( sourceImage, listOfQRCodes[ i * 2 + 1 ] )
                                        thresholdValue = 200
                                        squares, imgWithCellsThresh = find_squares( imgWithCells, imageWorker, thresholdValue )
                                        #imageWorker.copyOpenCVImageToPIL(imgWithCellsThresh, 1)
                                        #imgWithCells = imgWithCellsThresh
                                        #cv2.imwrite("NEW_image_with_cells.jpg", imgWithCells)
                                        countOfCells = len ( squares )
                                        #3 ячейки!
                                        cells = []
                                        listOfResult = []
                                        if ( countOfCells == 3 ):
                                                #изображения с ячейками
                                                for k in range ( 0, countOfCells):

                                                        #imgWithCells.save("image_with_cells.jpg")
                                                        #imageWorker.copyPILImageToOpenCV(imgWithCells)
                                                        cellImage = getImageByContour( squares[ k ],\
                                                                                       imgWithCellsThresh)

                                                        #cv2.imwrite("test_cell.jpg", cellImage)
                                                        
                                                        imageWorker.copyOpenCVImageToPIL( cellImage, 1 )
                                                        image = prepareCell( imageWorker.getPILImage(), \
                                                                             sourceImage )
                                                        cells.append( image )
                                                        #image.save( cellFileName )
                                                        #image.save("cell.jpg")
                                                        listOfResult.append( checkImageOnMark( image ) )
                                                sys.stdout.write( str( listOfResult ) + "\n" )
                                                #print( listOfResult )
                                        else:
                                                # Если вдруг, по результатам алгоритма поиска ячеек (по контурам),
                                                # их оказалось БОЛЕЕ 3-ех. Тогда вырезаем ВРУЧНУЮ (опираясь на
                                                # ИЗВЕСТНОЕ расстояние между ячейками в пикселях.

                                                cellsDetector = CellsDetector( sourceImage,\
                                                                               imgWithCells )
                                               
                                                firstCellImg, secondCellImg, thirdCellImg  = cellsDetector.start()
                                                listOfResult.append( checkImageOnMark( firstCellImg ) )
                                                listOfResult.append( checkImageOnMark( secondCellImg ) )
                                                listOfResult.append( checkImageOnMark( thirdCellImg ) )
                                                sys.stdout.write( str( listOfResult ) + "\n" )
                                        smallQRCodeData.setResultList( listOfResult )
                                        scanResult.addSmallQRCodeData( smallQRCodeData )
                                        
                                scanResult.setStatus( SUCCESS )
                                        
                                        
                        else:
                                #print( "there is no something about small QR codes :(");
                                sys.stderr.write( str( SMALL_QR_CODES_ARE_NOT_HERE ) )
                                scanResult.setStatus( FILED_SMALL_QR_CODE )
                else:
                        sys.stderr.write( str( FORM_NOT_FOUNDED ) )
                        # Не найден большой QR код.
                        scanResult.setStatus( FAILED_BIG_QR_CODE )
                        
        except BaseException:
                
                scanResult.setStatus( FAILED )

        return scanResult
Ejemplo n.º 4
0
def startScan( sourceImage,\
               idToken ):

    imageWorker = ImageWorker( sourceImage,\
                               PIL_IMAGE )

    # Заносим информацию о том, что распознавание НАЧАЛОСЬ
    # также, создаем объект scanResult, который будет содержать в себе
    # всю информацию по результату распознавания

    try:
        tokenFileWorker = TokenFileWorker()
        scanResult = ScanResult()
        scanResult.setIdToken(idToken)
        scanResult.setStatus(IN_PROGRESS)
        tokenFileWorker.setScanResult(scanResult)

        #ВАРИАНТ ГРУБОЙ СИЛЫ
        coordinateOfQRCode, imageWorker, symData = thirdVariantOfAlgorithm(
            imageWorker)

        #sourceImage.save( "check1.png" )
        #coordinateOfQRCode, sourceImage, symData = thirdVariantOfAlgorithm( sourceImage, \
        #                                                                    WAS_ROTATED )
        sourceImage = imageWorker.getPILImage()
        #sourceImage.save( "OnlyForm.jpg" )

        #sourceImage.save( "check.png" )
        if (len(coordinateOfQRCode) > 0):

            bootomLeftCorners = coordinateOfQRCode[1]
            bottomRightCorners = coordinateOfQRCode[2]
            start_x = bottomRightCorners[x] - int(
                (bottomRightCorners[x] - bootomLeftCorners[x]) / 2)
            start_y = bottomRightCorners[y]
            listOfQRCodes, dataList = findAllQRCodeOnColumn(
                imageWorker, start_x, start_y)

            if (len(listOfQRCodes) > 0):
                #выводим и записываем большой QR
                bigQRCodeData = BigQRCodeData()
                bigQRCodeData.parseDataFromStr(str(symData))
                scanResult.setBigQRCodeData(bigQRCodeData)
                sys.stdout.write(str(symData) + "\n")
                #print( symData )
                #начинаем вырезать ячейки по каждому коду

                for i in range(0, int(len(listOfQRCodes) / 2)):

                    #print( dataList[ i ] )
                    smallQRCodeData = SmallQRCodeData()
                    smallQRCodeData.setData(str(dataList[i]))
                    sys.stdout.write(str(dataList[i]) + "\n")
                    listOfResult = []
                    #fileNameImageWithCells = FOLDER_IMAGE_WITH_CELLS + \
                    #                         str( i ) + \
                    #                         IMAGE_FILENAME_IMAGE_WITH_CELLS

                    imgWithCells = getImageWithCells(sourceImage,
                                                     listOfQRCodes[i * 2 + 1])
                    thresholdValue = 200
                    squares, imgWithCellsThresh = find_squares(
                        imgWithCells, imageWorker, thresholdValue)
                    #imageWorker.copyOpenCVImageToPIL(imgWithCellsThresh, 1)
                    #imgWithCells = imgWithCellsThresh
                    #cv2.imwrite("NEW_image_with_cells.jpg", imgWithCells)
                    countOfCells = len(squares)
                    #3 ячейки!
                    cells = []
                    listOfResult = []
                    if (countOfCells == 3):
                        #изображения с ячейками
                        for k in range(0, countOfCells):

                            #imgWithCells.save("image_with_cells.jpg")
                            #imageWorker.copyPILImageToOpenCV(imgWithCells)
                            cellImage = getImageByContour( squares[ k ],\
                                                           imgWithCellsThresh)

                            #cv2.imwrite("test_cell.jpg", cellImage)

                            imageWorker.copyOpenCVImageToPIL(cellImage, 1)
                            image = prepareCell( imageWorker.getPILImage(), \
                                                 sourceImage )
                            cells.append(image)
                            #image.save( cellFileName )
                            #image.save("cell.jpg")
                            listOfResult.append(checkImageOnMark(image))
                        sys.stdout.write(str(listOfResult) + "\n")
                        #print( listOfResult )
                    else:
                        # Если вдруг, по результатам алгоритма поиска ячеек (по контурам),
                        # их оказалось БОЛЕЕ 3-ех. Тогда вырезаем ВРУЧНУЮ (опираясь на
                        # ИЗВЕСТНОЕ расстояние между ячейками в пикселях.

                        cellsDetector = CellsDetector( sourceImage,\
                                                       imgWithCells )

                        firstCellImg, secondCellImg, thirdCellImg = cellsDetector.start(
                        )
                        listOfResult.append(checkImageOnMark(firstCellImg))
                        listOfResult.append(checkImageOnMark(secondCellImg))
                        listOfResult.append(checkImageOnMark(thirdCellImg))
                        sys.stdout.write(str(listOfResult) + "\n")
                    smallQRCodeData.setResultList(listOfResult)
                    scanResult.addSmallQRCodeData(smallQRCodeData)

                scanResult.setStatus(SUCCESS)

            else:
                #print( "there is no something about small QR codes :(");
                sys.stderr.write(str(SMALL_QR_CODES_ARE_NOT_HERE))
                scanResult.setStatus(FILED_SMALL_QR_CODE)
        else:
            sys.stderr.write(str(FORM_NOT_FOUNDED))
            # Не найден большой QR код.
            scanResult.setStatus(FAILED_BIG_QR_CODE)

    except BaseException:

        scanResult.setStatus(FAILED)

    return scanResult