예제 #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)
예제 #3
0
    def __init__(self):

        self.m_IdToken = 0
        self.m_Status = UNAVAILABLE_SCAN_RESULT_RECORD
        self.m_BigQRCodeData = BigQRCodeData()
        self.m_SmallQRCodeDataList = []
예제 #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
예제 #5
0
def thirdVariantOfAlgorithm( imageWorker, \
                             rotatedStatus = IS_NOT_ROTATED ):

        global height_big_qr_code 
        global width_big_qr_code

        sourceImage = imageWorker.getPILImageCopy()
        height_big_qr_code = getX_PixelsByMillimeters( sourceImage, \
                                                       HEIGHT_OF_BIG_QR_CODE )
        width_big_qr_code = getY_PixelsByMillimeters( sourceImage, \
                                                      WIDTH_OF_BIG_QR_CODE )
        #ДИАГОНАЛЬ
        diagonal = math.sqrt( height_big_qr_code ** 2 + width_big_qr_code ** 2 )
        height_big_qr_code = diagonal
        width_big_qr_code = diagonal

        #im = Image.open( sourceImageFileName ).convert('L')
        width_source_image = sourceImage.width
        height_source_mage = sourceImage.height
        start_x = int( width_source_image - width_big_qr_code)
        start_y = 0
        symData = ""
        coordinateOfQRCode = []

        imageWorker.copyPILImageToOpenCV(sourceImage)

        # Пытаемся сперва СРАЗУ обнаружить коды
        res, coordinateOfQRCode, symData = tryToFindBigQRCodeInFullForm( imageWorker )
        
        while( 1 ):
                if ( res == 0 ):
                        crop_img = crop_image( sourceImage,\
                                               0,\
                                               start_x,\
                                               start_y,\
                                               width_big_qr_code,\
                                               height_big_qr_code )
                        imageWorker.copyPILImageToOpenCV(crop_img)
                        for i in range( 1, 10 ):
                                #print( "HI!")

                                threshold = 200 - i * 10
                                #cv2.imwrite( "JUST_FOR_TEST_OPENCV.jpg", imageWorker.getOpenCVImage())
                                threshImg = doThreshold( imageWorker.getOpenCVImage(),\
                                                         threshold )
                                imageWorker.copyOpenCVImageToPIL( threshImg )
                                #imageWorker.getPILImage().save("JUST_FOR_TEST_1.jpg")
                                symbols = scanImageForQRCode( imageWorker.getPILImage(), 0 )
                                if ( len( symbols ) > 0 ):
                                        sym = symbols[ 0 ]
                                        symData = sym.data
                                        if ( isItBigQRCode( symData ) ):
                                                topLeftCorners,bottomLeftCorners,bottomRightCorners,topRightCorners = [item for item in sym.locator]
                                                coordinateOfQRCode = topLeftCorners,bottomLeftCorners,bottomRightCorners,topRightCorners
                                                break
                #coordinateOfQRCode = findFirstQRCode( crop_img )
                if ( len( coordinateOfQRCode ) != 0 ):
                            #print("start_x, y", start_x, start_y)

                            bigQRCodeData = BigQRCodeData()
                            #print( symData )
                            bigQRCodeData.parseDataFromStr( str(symData) )

                                
                            if ( res == 0 ):
                                    coordinateOfQRCode = correctCoordinateOfQRCode( coordinateOfQRCode, start_x, start_y )

                            topLeftCorners,bottomLeftCorners,bottomRightCorners,topRightCorners = coordinateOfQRCode
                            img_with_crop = crop_image( sourceImage, \
                                                        0, \
                                                        bottomLeftCorners[x], \
                                                        topLeftCorners[y], \
                                                        bottomRightCorners[x] - bottomLeftCorners[x], \
                                                        bottomLeftCorners[y] - topLeftCorners[y] )
                            #img_with_crop.save( FOLDER_QR_CODES +
                            #                    IMAGE_FILENAME_BIG_QR_CODE )
                            formRotation = FormRotation( sourceImage, \
                                                         coordinateOfQRCode )
                            result, imageRotated, rotationValue = formRotation.start()

                            #сохранение попытки поворота
                            #imageRotated.save("tryToRotate.png")
                            #print( result )
                            #Если был поворот
                            if ( result == 1 and rotatedStatus == IS_NOT_ROTATED ):

                                    #image = imageRotated
                                    #coordinateOfQRCode, sourceImage, symData = thirdVariantOfAlgorithm( image)
                                    #widthOfQRCode = bottomRightCorners[x] - bottomLeftCorners[x]
                                    #heightOfQRCode = bottomLeftCorners[y] - topLeftCorners[y]
                                    
                                    xCenterPoint = int ( width_source_image / 2 );
                                    
                                    yCenterPoint = int ( height_source_mage / 2 )
                                    #print( "Before getNewPointByCoordinates", coordinateOfQRCode )

                                    # если сработал быстрый алгоритм можно быстро отыскать НОВЫЕ координаты.
                                    #print(FAST_ALGORITHM_IS_WORKED)
                                    if ( FAST_ALGORITHM_IS_WORKED == 0 ):
                                            #print("FAST")
                                            imageWorker.copyPILImageToOpenCV(imageRotated)
                                            res, coordinateOfQRCode, symData = tryToFindBigQRCodeInFullForm( imageWorker )
                                            
                                    else:
                                            #print("NOT FAST")
                                            coordinateOfQRCode = getNewPointByCoordinatesOfCode( coordinateOfQRCode,\
                                                                                                 xCenterPoint,\
                                                                                                 yCenterPoint,\
                                                                                                 rotationValue )
                                    #print( "After getNewPointByCoordinates", coordinateOfQRCode )
                                                                    

                            #print ( coordinateOfQRCode )
                            # Это код НЕ первой страницы?
                            if ( bigQRCodeData.getPageBit() == str(0) ):
                                # корректируем его координаты.
                                #print("CORRECT BIG CODE")
                                coordinateOfQRCode = bigQRCodeIsNotOnTheFirstPage( coordinateOfQRCode,\
                                                                                   imageRotated )
                            #print ( "NEW",coordinateOfQRCode )
                            
                            sourceImage, coordinateOfQRCode = detectFormByBigQRCode( imageRotated,\
                                                                                     coordinateOfQRCode )

                            #print( coordinateOfQRCode )
                            #crop_img.save("big_qr_code.jpg")
                            break

                start_x = start_x - int( width_big_qr_code / 10 )
                #Как только дошли до левого края страницы
                if ( start_x < 0 ):
                        start_x =  int( width_source_image - width_big_qr_code )
                        start_y = start_y + int( height_big_qr_code / 10 )
                if ( ( start_y + int( height_big_qr_code ) )  >= height_source_mage ):
                        break

        imageWorker.setPILImage( sourceImage )
        return coordinateOfQRCode, imageWorker, symData
예제 #6
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
예제 #7
0
def thirdVariantOfAlgorithm( imageWorker, \
                             rotatedStatus = IS_NOT_ROTATED ):

    global height_big_qr_code
    global width_big_qr_code

    sourceImage = imageWorker.getPILImageCopy()
    height_big_qr_code = getX_PixelsByMillimeters( sourceImage, \
                                                   HEIGHT_OF_BIG_QR_CODE )
    width_big_qr_code = getY_PixelsByMillimeters( sourceImage, \
                                                  WIDTH_OF_BIG_QR_CODE )
    #ДИАГОНАЛЬ
    diagonal = math.sqrt(height_big_qr_code**2 + width_big_qr_code**2)
    height_big_qr_code = diagonal
    width_big_qr_code = diagonal

    #im = Image.open( sourceImageFileName ).convert('L')
    width_source_image = sourceImage.width
    height_source_mage = sourceImage.height
    start_x = int(width_source_image - width_big_qr_code)
    start_y = 0
    symData = ""
    coordinateOfQRCode = []

    imageWorker.copyPILImageToOpenCV(sourceImage)

    # Пытаемся сперва СРАЗУ обнаружить коды
    res, coordinateOfQRCode, symData = tryToFindBigQRCodeInFullForm(
        imageWorker)

    while (1):
        if (res == 0):
            crop_img = crop_image( sourceImage,\
                                   0,\
                                   start_x,\
                                   start_y,\
                                   width_big_qr_code,\
                                   height_big_qr_code )
            imageWorker.copyPILImageToOpenCV(crop_img)
            for i in range(1, 10):
                #print( "HI!")

                threshold = 200 - i * 10
                #cv2.imwrite( "JUST_FOR_TEST_OPENCV.jpg", imageWorker.getOpenCVImage())
                threshImg = doThreshold( imageWorker.getOpenCVImage(),\
                                         threshold )
                imageWorker.copyOpenCVImageToPIL(threshImg)
                #imageWorker.getPILImage().save("JUST_FOR_TEST_1.jpg")
                symbols = scanImageForQRCode(imageWorker.getPILImage(), 0)
                if (len(symbols) > 0):
                    sym = symbols[0]
                    symData = sym.data
                    if (isItBigQRCode(symData)):
                        topLeftCorners, bottomLeftCorners, bottomRightCorners, topRightCorners = [
                            item for item in sym.locator
                        ]
                        coordinateOfQRCode = topLeftCorners, bottomLeftCorners, bottomRightCorners, topRightCorners
                        break
        #coordinateOfQRCode = findFirstQRCode( crop_img )
        if (len(coordinateOfQRCode) != 0):
            #print("start_x, y", start_x, start_y)

            bigQRCodeData = BigQRCodeData()
            #print( symData )
            bigQRCodeData.parseDataFromStr(str(symData))

            if (res == 0):
                coordinateOfQRCode = correctCoordinateOfQRCode(
                    coordinateOfQRCode, start_x, start_y)

            topLeftCorners, bottomLeftCorners, bottomRightCorners, topRightCorners = coordinateOfQRCode
            img_with_crop = crop_image( sourceImage, \
                                        0, \
                                        bottomLeftCorners[x], \
                                        topLeftCorners[y], \
                                        bottomRightCorners[x] - bottomLeftCorners[x], \
                                        bottomLeftCorners[y] - topLeftCorners[y] )
            #img_with_crop.save( FOLDER_QR_CODES +
            #                    IMAGE_FILENAME_BIG_QR_CODE )
            formRotation = FormRotation( sourceImage, \
                                         coordinateOfQRCode )
            result, imageRotated, rotationValue = formRotation.start()

            #сохранение попытки поворота
            #imageRotated.save("tryToRotate.png")
            #print( result )
            #Если был поворот
            if (result == 1 and rotatedStatus == IS_NOT_ROTATED):

                #image = imageRotated
                #coordinateOfQRCode, sourceImage, symData = thirdVariantOfAlgorithm( image)
                #widthOfQRCode = bottomRightCorners[x] - bottomLeftCorners[x]
                #heightOfQRCode = bottomLeftCorners[y] - topLeftCorners[y]

                xCenterPoint = int(width_source_image / 2)

                yCenterPoint = int(height_source_mage / 2)
                #print( "Before getNewPointByCoordinates", coordinateOfQRCode )

                # если сработал быстрый алгоритм можно быстро отыскать НОВЫЕ координаты.
                #print(FAST_ALGORITHM_IS_WORKED)
                if (FAST_ALGORITHM_IS_WORKED == 0):
                    #print("FAST")
                    imageWorker.copyPILImageToOpenCV(imageRotated)
                    res, coordinateOfQRCode, symData = tryToFindBigQRCodeInFullForm(
                        imageWorker)

                else:
                    #print("NOT FAST")
                    coordinateOfQRCode = getNewPointByCoordinatesOfCode( coordinateOfQRCode,\
                                                                         xCenterPoint,\
                                                                         yCenterPoint,\
                                                                         rotationValue )
                #print( "After getNewPointByCoordinates", coordinateOfQRCode )

            #print ( coordinateOfQRCode )
            # Это код НЕ первой страницы?
            if (bigQRCodeData.getPageBit() == str(0)):
                # корректируем его координаты.
                #print("CORRECT BIG CODE")
                coordinateOfQRCode = bigQRCodeIsNotOnTheFirstPage( coordinateOfQRCode,\
                                                                   imageRotated )
            #print ( "NEW",coordinateOfQRCode )

            sourceImage, coordinateOfQRCode = detectFormByBigQRCode( imageRotated,\
                                                                     coordinateOfQRCode )

            #print( coordinateOfQRCode )
            #crop_img.save("big_qr_code.jpg")
            break

        start_x = start_x - int(width_big_qr_code / 10)
        #Как только дошли до левого края страницы
        if (start_x < 0):
            start_x = int(width_source_image - width_big_qr_code)
            start_y = start_y + int(height_big_qr_code / 10)
        if ((start_y + int(height_big_qr_code)) >= height_source_mage):
            break

    imageWorker.setPILImage(sourceImage)
    return coordinateOfQRCode, imageWorker, symData