Exemple #1
0
def smallgrayscaleTest():
    largeNoiseFp = open('largenoise.png', 'rb')
    largeNoiseIm = Image.open(largeNoiseFp)

    imageWidth, imageHeight = largeNoiseIm.size
    bottomRightCorner30x30 = largeNoiseIm.crop(
        (imageWidth - 30, imageHeight - 30, imageWidth, imageHeight))
    largeNoiseIm = largeNoiseIm.crop(
        (imageWidth - 100, imageHeight - 100, imageWidth, imageHeight))

    startTime = time.time()
    result = pyscreeze.locate(bottomRightCorner30x30,
                              largeNoiseIm,
                              grayscale=False)
    print('Non-grayscale located at %s in: %s seconds' %
          (result, round(time.time() - startTime, 2)))

    startTime = time.time()
    result = pyscreeze.locate(bottomRightCorner30x30,
                              largeNoiseIm,
                              grayscale=True)
    print('Grayscale located at %s in: %s seconds' %
          (result, round(time.time() - startTime, 2)))

    largeNoiseFp.close()
Exemple #2
0
    def test_locate_filename(self):
        self.assertEqual((94, 94, 4, 4),
                         tuple(pyscreeze.locate('slash.png', 'haystack1.png')))
        self.assertEqual((93, 93, 4, 4),
                         tuple(pyscreeze.locate('slash.png', 'haystack2.png')))

        self.assertEqual((94, 94, 4, 4),
                         tuple(
                             pyscreeze.locate('slash.png',
                                              'haystack1.png',
                                              grayscale=True)))
        self.assertEqual((93, 93, 4, 4),
                         tuple(
                             pyscreeze.locate('slash.png',
                                              'haystack2.png',
                                              grayscale=True)))

        pyscreeze.USE_IMAGE_NOT_FOUND_EXCEPTION = True
        with self.assertRaises(pyscreeze.ImageNotFoundException):
            pyscreeze.locate('slash.png', 'colornoise.png')
        with self.assertRaises(pyscreeze.ImageNotFoundException):
            pyscreeze.locate('slash.png', 'colornoise.png', grayscale=True)

        pyscreeze.USE_IMAGE_NOT_FOUND_EXCEPTION = False
        self.assertEqual(pyscreeze.locate('slash.png', 'colornoise.png'), None)
        self.assertEqual(
            pyscreeze.locate('slash.png', 'colornoise.png', grayscale=True),
            None)
    def test_imageNotFound(self):
        colorNoiseFp = open('colornoise.png', 'rb')
        colorNoiseIm = Image.open(colorNoiseFp)
        slashFp = open('slash.png', 'rb')
        slashIm = Image.open(slashFp)

        with self.assertRaises(pyscreeze.ImageNotFoundException):
            pyscreeze.locate(slashIm, colorNoiseIm)

        colorNoiseFp.close()
        slashFp.close()
    def test_imageNotFound(self):
        colorNoiseFp = open('colornoise.png' ,'rb')
        colorNoiseIm = Image.open(colorNoiseFp)
        slashFp = open('slash.png' ,'rb')
        slashIm = Image.open(slashFp)

        with self.assertRaises(pyscreeze.ImageNotFoundException):
            pyscreeze.locate(slashIm, colorNoiseIm)

        colorNoiseFp.close()
        slashFp.close()
    def test_locate_im(self):
        slashFp = open('slash.png' ,'rb')
        haystack1Fp = open('haystack1.png' ,'rb')
        haystack2Fp = open('haystack2.png' ,'rb')
        colorNoiseFp = open('colornoise.png' ,'rb')
        slashIm = Image.open(slashFp)
        haystack1Im = Image.open(haystack1Fp)
        haystack2Im = Image.open(haystack2Fp)
        colorNoiseIm = Image.open(colorNoiseFp)

        self.assertEqual((94, 94, 4, 4), tuple(pyscreeze.locate(slashIm, haystack1Im)))
        self.assertEqual((93, 93, 4, 4), tuple(pyscreeze.locate(slashIm, haystack2Im)))

        self.assertEqual((94, 94, 4, 4), tuple(pyscreeze.locate(slashIm, haystack1Im, grayscale=True)))
        self.assertEqual((93, 93, 4, 4), tuple(pyscreeze.locate(slashIm, haystack2Im, grayscale=True)))

        with self.assertRaises(pyscreeze.ImageNotFoundException):
            pyscreeze.locate(slashIm, colorNoiseIm)
        with self.assertRaises(pyscreeze.ImageNotFoundException):
            pyscreeze.locate(slashIm, colorNoiseIm, grayscale=True)

        slashFp.close()
        haystack1Fp.close()
        haystack2Fp.close()
        colorNoiseFp.close()
    def test_locate_im(self):
        slashFp = open('slash.png', 'rb')
        haystack1Fp = open('haystack1.png', 'rb')
        haystack2Fp = open('haystack2.png', 'rb')
        colorNoiseFp = open('colornoise.png', 'rb')
        slashIm = Image.open(slashFp)
        haystack1Im = Image.open(haystack1Fp)
        haystack2Im = Image.open(haystack2Fp)
        colorNoiseIm = Image.open(colorNoiseFp)

        self.assertEqual((94, 94, 4, 4),
                         tuple(pyscreeze.locate(slashIm, haystack1Im)))
        self.assertEqual((93, 93, 4, 4),
                         tuple(pyscreeze.locate(slashIm, haystack2Im)))

        self.assertEqual(
            (94, 94, 4, 4),
            tuple(pyscreeze.locate(slashIm, haystack1Im, grayscale=True)))
        self.assertEqual(
            (93, 93, 4, 4),
            tuple(pyscreeze.locate(slashIm, haystack2Im, grayscale=True)))

        with self.assertRaises(pyscreeze.ImageNotFoundException):
            pyscreeze.locate(slashIm, colorNoiseIm)
        with self.assertRaises(pyscreeze.ImageNotFoundException):
            pyscreeze.locate(slashIm, colorNoiseIm, grayscale=True)

        slashFp.close()
        haystack1Fp.close()
        haystack2Fp.close()
        colorNoiseFp.close()
Exemple #7
0
    def test_imageNotFound(self):
        colorNoiseFp = open('colornoise.png', 'rb')
        colorNoiseIm = Image.open(colorNoiseFp)
        slashFp = open('slash.png', 'rb')
        slashIm = Image.open(slashFp)

        pyscreeze.USE_IMAGE_NOT_FOUND_EXCEPTION = True
        with self.assertRaises(pyscreeze.ImageNotFoundException):
            pyscreeze.locate(slashIm, colorNoiseIm)

        pyscreeze.USE_IMAGE_NOT_FOUND_EXCEPTION = False
        self.assertEqual(pyscreeze.locate(slashIm, colorNoiseIm), None)

        colorNoiseFp.close()
        slashFp.close()
Exemple #8
0
    def locate(self, image, type='', **kwargs):
        if type == "base64":
            needle_image = BytesIO(base64.b64decode(image))
        else:
            needle_image = Image.open(image)

        haystack_image = self.get_screenshot()

        if res := pyscreeze.locate(needle_image, haystack_image) != None:
            position = []
            self.x = pyscreeze.center(res)[0]
            self.y = pyscreeze.center(res)[1]
            position.append(pyscreeze.center(res)[0])
            position.append(pyscreeze.center(res)[1])
            return True
    def locate_on_screen(self, image, minSearchTime: int = 0, **kwargs):
        """
        在屏幕中定位指定图片的位置

        @param {str|PIL.Image} image - 要定位的图片文件路径或图片对象
        @param {int} minSearchTime=0 - 最长搜索时间,单位为毫秒,设置这个值可以在找不到图片的情况下,循环等待屏幕变化重新匹配
        @param {dict} kwargs - 其他执行参数:
            {bool} grayscale=False - 是否转换图片为灰度检索(提升30%速度)
            {int} limit=10000 - 匹配数量限制
            {int} step=1 - 匹配步骤,支持送1或2,如果为2会跳过细节,大约能提升3倍速度,但有可能匹配不上
            {float} confidence=0.999 - 匹配度

        @returns {(int, int, int, int)} - 返回图片的位置(x, y, width, height), 找不到返回None
        """
        if type(image) == str:
            _image = Image.open(image)
        else:
            _image = image

        start = time.time()
        while True:
            try:
                screenshotIm = self.screenshot()
                retVal = pyscreeze.locate(_image, screenshotIm, **kwargs)
                if retVal or time.time() - start > minSearchTime:
                    return retVal
            except pyscreeze.ImageNotFoundException:
                return None
Exemple #10
0
def largegrayscaleTest():
    largeNoiseFp = open('largenoise.png' ,'rb')
    largeNoiseIm = Image.open(largeNoiseFp)

    imageWidth, imageHeight = largeNoiseIm.size
    bottomRightCorner100x100 = largeNoiseIm.crop((imageWidth - 100, imageHeight - 100, imageWidth, imageHeight))

    startTime = time.time()
    result = pyscreeze.locate(bottomRightCorner100x100, largeNoiseIm, grayscale=False)
    print('Non-grayscale located at %s in: %s seconds' % (result, round(time.time() - startTime, 2)))

    startTime = time.time()
    result = pyscreeze.locate(bottomRightCorner100x100, largeNoiseIm, grayscale=True)
    print('Grayscale located at %s in: %s seconds' % (result, round(time.time() - startTime, 2)))

    largeNoiseFp.close()
Exemple #11
0
    def test_locate_filename(self):
        self.assertEqual((94, 94, 4, 4), tuple(pyscreeze.locate('slash.png', 'haystack1.png')))
        self.assertEqual((93, 93, 4, 4), tuple(pyscreeze.locate('slash.png', 'haystack2.png')))

        self.assertEqual((94, 94, 4, 4), tuple(pyscreeze.locate('slash.png', 'haystack1.png', grayscale=True)))
        self.assertEqual((93, 93, 4, 4), tuple(pyscreeze.locate('slash.png', 'haystack2.png', grayscale=True)))

        with self.assertRaises(pyscreeze.ImageNotFoundException):
            pyscreeze.locate('slash.png', 'colornoise.png')
        with self.assertRaises(pyscreeze.ImageNotFoundException):
            pyscreeze.locate('slash.png', 'colornoise.png', grayscale=True)
Exemple #12
0
    def test_locate_im_step(self):
        slashFp = open('slash.png', 'rb')
        haystack1Fp = open('haystack1.png', 'rb')
        haystack2Fp = open('haystack2.png', 'rb')
        colorNoiseFp = open('colornoise.png', 'rb')
        slashIm = Image.open(slashFp)
        haystack1Im = Image.open(haystack1Fp)
        haystack2Im = Image.open(haystack2Fp)
        colorNoiseIm = Image.open(colorNoiseFp)

        for step in range(1, 10):
            self.assertEqual(((94, 94, 4, 4), step), (tuple(
                pyscreeze.locate(slashIm, haystack1Im, step=step)), step))
            self.assertEqual(((93, 93, 4, 4), step), (tuple(
                pyscreeze.locate(slashIm, haystack2Im, step=step)), step))

            self.assertEqual(((94, 94, 4, 4), step), (tuple(
                pyscreeze.locate(
                    slashIm, haystack1Im, grayscale=True, step=step)), step))
            self.assertEqual(((93, 93, 4, 4), step), (tuple(
                pyscreeze.locate(
                    slashIm, haystack2Im, grayscale=True, step=step)), step))

            self.assertEqual(
                (None, step),
                (pyscreeze.locate(slashIm, colorNoiseIm, step=step), step))
            self.assertEqual((None, step), (pyscreeze.locate(
                slashIm, colorNoiseIm, grayscale=True, step=step), step))

        slashFp.close()
        haystack1Fp.close()
        haystack2Fp.close()
        colorNoiseFp.close()
Exemple #13
0
def locateTest():
    largeNoiseFp = open('largenoise.png' ,'rb')
    largeNoiseIm = Image.open(largeNoiseFp)

    imageWidth, imageHeight = largeNoiseIm.size
    bottomRightCorner100x100 = largeNoiseIm.crop((imageWidth - 100, imageHeight - 100, imageWidth, imageHeight))

    for step in (1, 2, 4, 8, 16, 32):
        startTime = time.time()
        result = pyscreeze.locate(bottomRightCorner100x100, largeNoiseIm, step=step)
        print('bottomRightCorner100x100 (step %s) located at %s in: %s seconds' % (step, result, round(time.time() - startTime, 2)))

    largeNoiseFp.close()
Exemple #14
0
def locateTest():
    largeNoiseFp = open('largenoise.png' ,'rb')
    largeNoiseIm = Image.open(largeNoiseFp)

    imageWidth, imageHeight = largeNoiseIm.size
    bottomRightCorner100x100 = largeNoiseIm.crop((imageWidth - 100, imageHeight - 100, imageWidth, imageHeight))

    for step in (1, 2, 4, 8, 16, 32):
        startTime = time.time()
        result = pyscreeze.locate(bottomRightCorner100x100, largeNoiseIm, step=step)
        print('bottomRightCorner100x100 (step %s) located at %s in: %s seconds' % (step, result, round(time.time() - startTime, 2)))

    largeNoiseFp.close()
    def test_locate_filename(self):
        self.assertEqual((94, 94, 4, 4), tuple(pyscreeze.locate('slash.png', 'haystack1.png')))
        self.assertEqual((93, 93, 4, 4), tuple(pyscreeze.locate('slash.png', 'haystack2.png')))

        self.assertEqual((94, 94, 4, 4), tuple(pyscreeze.locate('slash.png', 'haystack1.png', grayscale=True)))
        self.assertEqual((93, 93, 4, 4), tuple(pyscreeze.locate('slash.png', 'haystack2.png', grayscale=True)))

        self.assertEqual(None, pyscreeze.locate('slash.png', 'colornoise.png'))
        self.assertEqual(None, pyscreeze.locate('slash.png', 'colornoise.png', grayscale=True))
Exemple #16
0
    def test_imageNotFound(self):
        colorNoiseFp = open('colornoise.png' ,'rb')
        colorNoiseIm = Image.open(colorNoiseFp)
        slashFp = open('slash.png' ,'rb')
        slashIm = Image.open(slashFp)

        oldSetting = pyscreeze.RAISE_IF_NOT_FOUND

        pyscreeze.RAISE_IF_NOT_FOUND = True
        self.assertRaises(pyscreeze.ImageNotFoundException, pyscreeze.locate, slashIm, colorNoiseIm)
        pyscreeze.RAISE_IF_NOT_FOUND = False
        self.assertEqual(None, pyscreeze.locate(slashIm, colorNoiseIm))

        pyscreeze.RAISE_IF_NOT_FOUND = oldSetting
        colorNoiseFp.close()
        slashFp.close()
Exemple #17
0
    def test_imageNotFound(self):
        colorNoiseFp = open('colornoise.png', 'rb')
        colorNoiseIm = Image.open(colorNoiseFp)
        slashFp = open('slash.png', 'rb')
        slashIm = Image.open(slashFp)

        oldSetting = pyscreeze.RAISE_IF_NOT_FOUND

        pyscreeze.RAISE_IF_NOT_FOUND = True
        self.assertRaises(pyscreeze.ImageNotFoundException, pyscreeze.locate,
                          slashIm, colorNoiseIm)
        pyscreeze.RAISE_IF_NOT_FOUND = False
        self.assertEqual(None, pyscreeze.locate(slashIm, colorNoiseIm))

        pyscreeze.RAISE_IF_NOT_FOUND = oldSetting
        colorNoiseFp.close()
        slashFp.close()
Exemple #18
0
def locate(*images,
           For=0.0,
           region=None,
           grayscale=None,
           confidence: Union[float, list] = 0.8,
           verbose=False):
    imglist = list(images)
    retVal = [None] * len(imglist)
    if region is None:
        region = detect_monitor(
            -1, verbose=False)  # default monitor is the last(rightmost) one.
    start = time.time()
    if not isinstance(confidence, list):
        confidence = [confidence]
    while True:
        with mss.mss() as sct:
            ltrb = (region[0], region[1], region[0] + region[2],
                    region[1] + region[3])
            x = sct.grab(monitor=ltrb)
        screenshotIm = Image.frombytes("RGB", x.size, x.bgra, "raw", "BGRX")
        for i in range(len(imglist)):
            for conf in confidence:
                try:
                    imglist[i] = pyscreeze._load_cv2(imglist[i],
                                                     grayscale=grayscale)
                    bbox = pyscreeze.locate(imglist[i],
                                            screenshotIm,
                                            grayscale=grayscale,
                                            confidence=conf)
                    retVal[i] = (int(bbox[0] + bbox[2] / 2 + region[0]),
                                 int(bbox[1] + bbox[3] / 2) + region[1])
                    del imglist[i]
                    if verbose is True:
                        print(f'{i}th image found on confidence {conf}')
                except OSError as e:
                    raise e
                except Exception:
                    pass
        if any(retVal) or time.time() - start > For:
            if len(retVal) == 1:
                return retVal[0], screenshotIm
            else:
                return retVal, screenshotIm
    def test_locate_filename(self):
        self.assertEqual((94, 94, 4, 4),
                         tuple(pyscreeze.locate('slash.png', 'haystack1.png')))
        self.assertEqual((93, 93, 4, 4),
                         tuple(pyscreeze.locate('slash.png', 'haystack2.png')))

        self.assertEqual((94, 94, 4, 4),
                         tuple(
                             pyscreeze.locate('slash.png',
                                              'haystack1.png',
                                              grayscale=True)))
        self.assertEqual((93, 93, 4, 4),
                         tuple(
                             pyscreeze.locate('slash.png',
                                              'haystack2.png',
                                              grayscale=True)))

        with self.assertRaises(pyscreeze.ImageNotFoundException):
            pyscreeze.locate('slash.png', 'colornoise.png')
        with self.assertRaises(pyscreeze.ImageNotFoundException):
            pyscreeze.locate('slash.png', 'colornoise.png', grayscale=True)
Exemple #20
0
    def test_locate_filename(self):
        self.assertEqual((94, 94, 4, 4),
                         tuple(pyscreeze.locate('slash.png', 'haystack1.png')))
        self.assertEqual((93, 93, 4, 4),
                         tuple(pyscreeze.locate('slash.png', 'haystack2.png')))

        self.assertEqual((94, 94, 4, 4),
                         tuple(
                             pyscreeze.locate('slash.png',
                                              'haystack1.png',
                                              grayscale=True)))
        self.assertEqual((93, 93, 4, 4),
                         tuple(
                             pyscreeze.locate('slash.png',
                                              'haystack2.png',
                                              grayscale=True)))

        self.assertEqual(None, pyscreeze.locate('slash.png', 'colornoise.png'))
        self.assertEqual(
            None,
            pyscreeze.locate('slash.png', 'colornoise.png', grayscale=True))
Exemple #21
0
    def test_locate_im_step(self):
        slashFp = open('slash.png' ,'rb')
        haystack1Fp = open('haystack1.png' ,'rb')
        haystack2Fp = open('haystack2.png' ,'rb')
        colorNoiseFp = open('colornoise.png' ,'rb')
        slashIm = Image.open(slashFp)
        haystack1Im = Image.open(haystack1Fp)
        haystack2Im = Image.open(haystack2Fp)
        colorNoiseIm = Image.open(colorNoiseFp)

        for step in range(1, 10):
            self.assertEqual(((94, 94, 4, 4), step), (tuple(pyscreeze.locate(slashIm, haystack1Im, step=step)), step))
            self.assertEqual(((93, 93, 4, 4), step), (tuple(pyscreeze.locate(slashIm, haystack2Im, step=step)), step))

            self.assertEqual(((94, 94, 4, 4), step), (tuple(pyscreeze.locate(slashIm, haystack1Im, grayscale=True, step=step)), step))
            self.assertEqual(((93, 93, 4, 4), step), (tuple(pyscreeze.locate(slashIm, haystack2Im, grayscale=True, step=step)), step))

            self.assertEqual((None, step), (pyscreeze.locate(slashIm, colorNoiseIm, step=step), step))
            self.assertEqual((None, step), (pyscreeze.locate(slashIm, colorNoiseIm, grayscale=True, step=step), step))

        slashFp.close()
        haystack1Fp.close()
        haystack2Fp.close()
        colorNoiseFp.close()