コード例 #1
0
def simple(scale=0.5):
    adb.use_openstf()
    img = adb.screenshot(format='cv2')
    while img is None:
        time.sleep(1)
        img = adb.screenshot(format='cv2')

    print 'Press Ctrl-C or Esc to quit.'

    winname = 'Sync Screen'
    cv2.namedWindow(winname)
    while True:
        try:
            img = adb.screenshot(format='cv2', scale=scale)
            cv2.imshow(winname, img)
            key = cv2.waitKey(10)
            if key == 27:  # Escape
                break
        except KeyboardInterrupt:
            print 'Done'
            break
        except:
            traceback.print_exc()
            break

    cv2.destroyWindow(winname)
コード例 #2
0
def main(host=None,
         port=None,
         serial=None,
         out='screenshot.png',
         method='minicap'):
    """
    If minicap not avaliable then use uiautomator instead

    Disable scale for now.
    Because -s scale is conflict of -s serial
    """
    adb.use(serial, host, port)
    # correct screencap method
    if not adb.is_file_exists(
            '/data/local/tmp/minicap') and method == 'minicap':
        method = 'uiautomator'

    if method == 'minicap':
        try:
            adb.screenshot_minicap(filename=out, scale=1.0)
            print 'File saved to "%s"' % out
            return
        except EnvironmentError:
            print 'minicap not available, use uiautomator instead.'
            method = 'uiautomator'

    if method == 'uiautomator':
        print 'Screenshot method use uiautomator'
        adb.use_uiautomator()
        adb.screenshot(filename=out, scale=1.0)
        print 'File saved to "%s"' % out
        return

    print 'method invalid: %s' % method
コード例 #3
0
ファイル: screencap.py プロジェクト: huyq119/AutomatorX
def main(host=None, port=None, serial=None, out='screenshot.png', method='minicap'):
    """
    If minicap not avaliable then use uiautomator instead

    Disable scale for now.
    Because -s scale is conflict of -s serial
    """
    adb.use(serial, host, port)
    # correct screencap method
    if not adb.is_file_exists('/data/local/tmp/minicap') and method == 'minicap':
        method = 'uiautomator'

    if method == 'minicap':
        try:
            adb.screenshot_minicap(filename=out, scale=1.0)
            print 'File saved to "%s"' % out
            return
        except EnvironmentError:
            print 'minicap not available, use uiautomator instead.'
            method = 'uiautomator'
    
    if method == 'uiautomator':
        print 'Screenshot method use uiautomator'
        adb.use_uiautomator()
        adb.screenshot(filename=out, scale=1.0)
        print 'File saved to "%s"' % out
        return

    print 'method invalid: %s' % method
コード例 #4
0
ファイル: screen.py プロジェクト: 917228145/AutomatorX
def screen_simple(scale=0.5):
    adb.use_openstf()
    img = adb.screenshot(format='cv2')
    while img is None:
        time.sleep(1)
        img = adb.screenshot(format='cv2')

    print 'Press Ctrl-C or Esc to quit.'

    winname = 'Sync Screen'
    cv2.namedWindow(winname)
    while True:
        try:
            img = adb.screenshot(format='cv2', scale=scale)
            cv2.imshow(winname, img)
            key = cv2.waitKey(10)
            if key == 27: # Escape
                break
        except KeyboardInterrupt:
            print 'Done'
            break
        except:
            traceback.print_exc()
            break

    cv2.destroyWindow(winname)
コード例 #5
0
ファイル: screen.py プロジェクト: 917228145/AutomatorX
        def _refresh_screen(self):
            self.image = adb.screenshot(scale=scale)
            self.tkimage = ImageTk.PhotoImage(self.image)
            w, h = self.image.size
            self.canvas.config(width=w, height=h)
            if self.canvas_image is None:
                self.canvas_image = self.canvas.create_image(0, 0, anchor=tk.NW, image=self.tkimage)
            else:
                self.canvas.itemconfig(self.canvas_image, image=self.tkimage)

            self.root.after(10, self._refresh_screen)
コード例 #6
0
        def _refresh_screen(self):
            self.image = adb.screenshot(scale=scale)
            self.tkimage = ImageTk.PhotoImage(self.image)
            w, h = self.image.size
            self.canvas.config(width=w, height=h)
            if self.canvas_image is None:
                self.canvas_image = self.canvas.create_image(
                    0, 0, anchor=tk.NW, image=self.tkimage)
            else:
                self.canvas.itemconfig(self.canvas_image, image=self.tkimage)

            self.root.after(10, self._refresh_screen)
コード例 #7
0
ファイル: screen.py プロジェクト: mariusmagureanu/AutomatorX
def main(scale=0.5):
    adb.use_openstf()
    img = adb.screenshot()
    while img is None:
        time.sleep(1)
        img = adb.screenshot()

    while True:
        try:
            img = adb.screenshot()
            h, w = img.shape[:2]
            h, w = int(h*scale), int(w*scale)
            img = cv2.resize(img, dsize=(w, h))
            cv2.imshow('screen', img)
            cv2.waitKey(10)
        except KeyboardInterrupt:
            print 'Done'
            break
        except:
            traceback.print_exc()
            break
コード例 #8
0
def main(output='out.avi',
         scale=0.5,
         portrait=False,
         overwrite=True,
         verbose=True):
    if os.path.exists(output):
        print 'output file exists!'
        if overwrite:
            print 'overwriting', output
            os.remove(output)
        else:
            return

    adb.use_openstf()
    img = adb.screenshot()
    while img is None:
        time.sleep(1)
        img = adb.screenshot()
    if verbose:
        cv2.imshow('screen', img)

    w, h = adb.display()
    w, h = int(w * scale), int(h * scale)
    framesize = (w, h) if portrait else (h, w)
    fps = 24.0
    # refs http://www.fourcc.org/codecs.php
    # avaiable fourccs: XVID, MJPG
    fourcc = cv2.cv.FOURCC(*'MJPG')
    writer = cv2.VideoWriter(output, fourcc, fps, framesize)

    # video (width, height), images should be resized to fit in video frame.
    vw, vh = framesize

    tic = time.clock()
    toc = time.clock()
    while True:
        try:
            time.sleep(1.0 / fps - max(toc - tic, 0))
            tic = time.clock()
            img = adb.screenshot()
            h, w = img.shape[:2]
            if h * vw == w * vh:
                h, w = vh, vw
                frame = cv2.resize(img, dsize=(w, h))
            else:
                frame = np.zeros((vh, vw, 3), dtype=np.uint8)
                sh = vh * 1.0 / h
                sw = vw * 1.0 / w
                if sh < sw:
                    h, w = vh, int(sh * w)
                else:
                    h, w = int(sw * h), vw
                left, top = (vw - w) / 2, (vh - h) / 2
                frame[top:top + h, left:left + w, :] = cv2.resize(img,
                                                                  dsize=(w, h))

            writer.write(frame)
            toc = time.clock()
            if verbose:
                cv2.imshow('screen', frame)
                cv2.waitKey(1)
        except KeyboardInterrupt:
            print 'Done'
            break
        except:
            traceback.print_exc()
            break
    writer.release()
コード例 #9
0
ファイル: screenrecord.py プロジェクト: tazjel/AutomatorX
def main(output="out.avi", scale=0.5, portrait=False, overwrite=True, verbose=True):
    if os.path.exists(output):
        print "output file exists!"
        if overwrite:
            print "overwriting", output
            os.remove(output)
        else:
            return

    adb.use_openstf()
    img = adb.screenshot(format="cv2")
    while img is None:
        time.sleep(1)
        img = adb.screenshot(format="cv2")
    if verbose:
        cv2.imshow("screen", img)

    w, h = adb.display()
    w, h = int(w * scale), int(h * scale)
    framesize = (w, h) if portrait else (h, w)
    fps = 24.0
    # refs http://www.fourcc.org/codecs.php
    # avaiable fourccs: XVID, MJPG
    fourcc = cv2.cv.FOURCC(*"MJPG")
    writer = cv2.VideoWriter(output, fourcc, fps, framesize)

    # video (width, height), images should be resized to fit in video frame.
    vw, vh = framesize

    tic = time.clock()
    toc = time.clock()
    while True:
        try:
            time.sleep(1.0 / fps - max(toc - tic, 0))
            tic = time.clock()
            img = adb.screenshot(format="cv2")
            h, w = img.shape[:2]
            if h * vw == w * vh:
                h, w = vh, vw
                frame = cv2.resize(img, dsize=(w, h))
            else:
                frame = np.zeros((vh, vw, 3), dtype=np.uint8)
                sh = vh * 1.0 / h
                sw = vw * 1.0 / w
                if sh < sw:
                    h, w = vh, int(sh * w)
                else:
                    h, w = int(sw * h), vw
                left, top = (vw - w) / 2, (vh - h) / 2
                frame[top : top + h, left : left + w, :] = cv2.resize(img, dsize=(w, h))

            writer.write(frame)
            toc = time.clock()
            if verbose:
                cv2.imshow("screen", frame)
                cv2.waitKey(1)
        except KeyboardInterrupt:
            print "Done"
            break
        except:
            traceback.print_exc()
            break
    writer.release()
コード例 #10
0
def gui(scale=0.5):
    from PIL import Image, ImageTk
    import Tkinter as tk
    import tkFileDialog

    class Screen(object):
        def __init__(self):
            self.root = tk.Tk()
            self.root.title('Sync Screen')
            # self.image = Image.open(os.path.join(__dir__, 'static', 'screen.png'))
            self.image = None
            self.tkimage = None
            self.canvas_image = None

            self.make_toolbar()
            self.make_canvas()

        def make_toolbar(self):
            # tools: capture, power, home, menu, back, volume_up, volume_down, turn_screen, keymapping_settings
            toolbar = tk.Frame(self.root)
            self.icons = []  # need to keep a reference for tk images. wtf.

            def capture():
                if self.image is None:
                    print 'Not initialized, try later.'
                    return
                d = tkFileDialog.asksaveasfilename(
                    filetypes=(('Images', '*.png;*.jpg;'), ),
                    initialfile='screen.png')
                if not d:  # canceled
                    return
                if not d.endswith('.png') and not d.endswith('.jpg'):
                    d += '.png'
                print 'Save to', d
                self.image.save(d)

            icon = ImageTk.PhotoImage(
                file=os.path.join(__dir__, 'static', 'icons', 'save.ico'))
            tk.Button(toolbar, image=icon, command=capture).pack(side=tk.LEFT,
                                                                 padx=2,
                                                                 pady=2)
            self.icons.append(icon)

            # def rotate():
            #     print 'rotate screen (Not Implemented yet.)'
            # icon = ImageTk.PhotoImage(file=os.path.join(__dir__, 'static', 'icons', 'rotate.ico'))
            # tk.Button(toolbar, image=icon, command=rotate).pack(side=tk.LEFT, padx=2, pady=2)
            # self.icons.append(icon)

            for key in ('power', 'home', 'menu', 'back', 'volume_up',
                        'volume_down'):
                icon = ImageTk.PhotoImage(
                    file=os.path.join(__dir__, 'static', 'icons', '%s.ico' %
                                      key))
                self.icons.append(icon)
                b = tk.Button(toolbar,
                              image=icon,
                              command=lambda k=key: adb.keyevent('KEYCODE_%s' %
                                                                 k.upper()))
                b.pack(side=tk.LEFT, padx=2, pady=2)

            toolbar.pack(side=tk.TOP, fill=tk.X)

        def make_canvas(self):
            # screen canvas, bind mouse input & keyboard input
            self.canvas = tk.Canvas(self.root,
                                    bg='black',
                                    bd=0,
                                    highlightthickness=0)
            self.canvas.pack()

            def _screen2touch(w, h, x, y):
                '''convert touch position'''
                ori = adb.orientation()
                if ori == 0:
                    return x, y
                elif ori == 1:  # landscape-right
                    return w - y, x
                elif ori == 2:  # upsidedown
                    return w - x, h - y
                elif ori == 3:  # landscape-left
                    return h - x, y
                return x, y

            w, h = adb.display()
            screen2touch = partial(_screen2touch, w, h)

            def on_mouse_down(event):
                self.canvas.focus_set()
                x, y = int(event.x / scale), int(event.y / scale)
                x, y = screen2touch(x, y)
                adb._mini.touchqueue.put('d 0 %d %d 30\nc\n' % (x, y))

            def on_mouse_up(event):
                adb._mini.touchqueue.put('u 0\nc\n')

            def on_mouse_drag(event):
                x, y = int(event.x / scale), int(event.y / scale)
                x, y = screen2touch(x, y)
                adb._mini.touchqueue.put('m 0 %d %d 30\nc\n' % (x, y))

            self.canvas.bind('<ButtonPress-1>', on_mouse_down)
            self.canvas.bind('<ButtonRelease-1>', on_mouse_up)
            self.canvas.bind('<B1-Motion>', on_mouse_drag)

            keymap = {
                '\r': 'KEYCODE_ENTER',
                ' ': 'KEYCODE_SPACE',
                '\x08': 'KEYCODE_DEL',
            }

            def on_key(event):
                c = event.char
                # print 'key pressed', repr(c), type(c)
                if c in 'adbcdefghijklmnopqrstuvwxyz0123456789':
                    adb.input(c)
                    return 'break'
                if c in keymap:
                    adb.keyevent(keymap[c])
                    return 'break'

            self.canvas.bind('<Key>', on_key)

        # def refresh_screen(self, screen):
        #     # refresh rate is about 0.03 second, cause flickering
        #     if screen is None:
        #         return
        #     t0 = time.time()
        #     h, w = screen.shape[:2]
        #     w, h = int(w*scale), int(h*scale)
        #     screen = cv2.resize(screen, (w, h))
        #     self.image = Image.fromarray(screen[:, :, ::-1])
        #     self.tkimage = ImageTk.PhotoImage(self.image)

        #     # # thumbnail is slow... around 0.16 second
        #     # w, h = self.image.size
        #     # image = self.image.copy()
        #     # image.thumbnail((w, h), Image.ANTIALIAS)
        #     # self.tkimage = ImageTk.PhotoImage(image)

        #     self.canvas.config(width=w, height=h)
        #     if self.canvas_image is None:
        #         self.canvas_image = self.canvas.create_image(0, 0, anchor=tk.NW, image=self.tkimage)
        #     else:
        #         self.canvas.itemconfig(self.canvas_image, image=self.tkimage)
        #     print time.time() - t0

        def _refresh_screen(self):
            self.image = adb.screenshot(scale=scale)
            self.tkimage = ImageTk.PhotoImage(self.image)
            w, h = self.image.size
            self.canvas.config(width=w, height=h)
            if self.canvas_image is None:
                self.canvas_image = self.canvas.create_image(
                    0, 0, anchor=tk.NW, image=self.tkimage)
            else:
                self.canvas.itemconfig(self.canvas_image, image=self.tkimage)

            self.root.after(10, self._refresh_screen)

        def run(self):
            self._refresh_screen()
            self.root.mainloop()

    s = Screen()

    adb.use_openstf(enabletouch=True)  #, on_screenchange=s.refresh_screen)
    img = adb.screenshot()
    while img is None:
        time.sleep(1)
        img = adb.screenshot()

    s.run()
コード例 #11
0
ファイル: screen.py プロジェクト: 917228145/AutomatorX
def screen_with_controls(scale=0.5):
    from PIL import Image, ImageTk
    import Tkinter as tk
    import tkFileDialog

    class Screen(object):
        def __init__(self):
            self.root = tk.Tk()
            self.root.title('Sync Screen')
            # self.image = Image.open(os.path.join(__dir__, 'static', 'screen.png'))
            self.image = None
            self.tkimage = None
            self.canvas_image = None

            self.make_toolbar()
            self.make_canvas()

        def make_toolbar(self):
            # tools: capture, power, home, menu, back, volume_up, volume_down, turn_screen, keymapping_settings
            toolbar = tk.Frame(self.root)
            self.icons = [] # need to keep a reference for tk images. wtf.

            def capture():
                if self.image is None:
                    print 'Not initialized, try later.'
                    return
                d = tkFileDialog.asksaveasfilename(filetypes=(('Images', '*.png;*.jpg;'),), initialfile='screen.png')
                if not d: # canceled
                    return
                if not d.endswith('.png') and not d.endswith('.jpg'):
                    d += '.png'
                print 'Save to', d
                self.image.save(d)
            icon = ImageTk.PhotoImage(file=os.path.join(__dir__, 'static', 'icons', 'save.ico'))
            tk.Button(toolbar, image=icon, command=capture).pack(side=tk.LEFT, padx=2, pady=2)
            self.icons.append(icon)

            # def rotate():
            #     print 'rotate screen (Not Implemented yet.)'
            # icon = ImageTk.PhotoImage(file=os.path.join(__dir__, 'static', 'icons', 'rotate.ico'))
            # tk.Button(toolbar, image=icon, command=rotate).pack(side=tk.LEFT, padx=2, pady=2)
            # self.icons.append(icon)

            for key in ('power', 'home', 'menu', 'back', 'volume_up', 'volume_down'):
                icon = ImageTk.PhotoImage(file=os.path.join(__dir__, 'static', 'icons', '%s.ico' % key))
                self.icons.append(icon)
                b = tk.Button(toolbar, image=icon, command=lambda k=key:adb.keyevent('KEYCODE_%s' % k.upper()))
                b.pack(side=tk.LEFT, padx=2, pady=2)

            toolbar.pack(side=tk.TOP, fill=tk.X)

        def make_canvas(self):
            # screen canvas, bind mouse input & keyboard input
            self.canvas = tk.Canvas(self.root, bg='black', bd=0, highlightthickness=0)
            self.canvas.pack()

            def _screen2touch(w, h, x, y):
                '''convert touch position'''
                ori = adb.orientation()
                if ori == 0:
                    return x, y
                elif ori == 1: # landscape-right
                    return w-y, x
                elif ori == 2: # upsidedown
                    return w-x, h-y
                elif ori == 3: # landscape-left
                    return h-x, y
                return x, y
            
            w, h = adb.display()
            screen2touch = partial(_screen2touch, w, h)

            def on_mouse_down(event):
                self.canvas.focus_set()
                x, y = int(event.x/scale), int(event.y/scale)
                x, y = screen2touch(x, y)
                adb._mini.touchqueue.put('d 0 %d %d 30\nc\n' % (x, y))

            def on_mouse_up(event):
                adb._mini.touchqueue.put('u 0\nc\n')

            def on_mouse_drag(event):
                x, y = int(event.x/scale), int(event.y/scale)
                x, y = screen2touch(x, y)
                adb._mini.touchqueue.put('m 0 %d %d 30\nc\n' % (x, y))

            self.canvas.bind('<ButtonPress-1>', on_mouse_down)
            self.canvas.bind('<ButtonRelease-1>', on_mouse_up)
            self.canvas.bind('<B1-Motion>', on_mouse_drag)

            keymap = {'\r':'KEYCODE_ENTER', ' ':'KEYCODE_SPACE', '\x08':'KEYCODE_DEL', }

            def on_key(event):
                c = event.char
                # print 'key pressed', repr(c), type(c)
                if c in 'adbcdefghijklmnopqrstuvwxyz0123456789':
                    adb.input(c)
                    return 'break'
                if c in keymap:
                    adb.keyevent(keymap[c])
                    return 'break'

            self.canvas.bind('<Key>', on_key)

        # def refresh_screen(self, screen):
        #     # refresh rate is about 0.03 second, cause flickering
        #     if screen is None:
        #         return
        #     t0 = time.time()
        #     h, w = screen.shape[:2]
        #     w, h = int(w*scale), int(h*scale)
        #     screen = cv2.resize(screen, (w, h))
        #     self.image = Image.fromarray(screen[:, :, ::-1])
        #     self.tkimage = ImageTk.PhotoImage(self.image)
            
        #     # # thumbnail is slow... around 0.16 second
        #     # w, h = self.image.size
        #     # image = self.image.copy()
        #     # image.thumbnail((w, h), Image.ANTIALIAS)
        #     # self.tkimage = ImageTk.PhotoImage(image)

        #     self.canvas.config(width=w, height=h)
        #     if self.canvas_image is None:
        #         self.canvas_image = self.canvas.create_image(0, 0, anchor=tk.NW, image=self.tkimage)
        #     else:
        #         self.canvas.itemconfig(self.canvas_image, image=self.tkimage)
        #     print time.time() - t0

        def _refresh_screen(self):
            self.image = adb.screenshot(scale=scale)
            self.tkimage = ImageTk.PhotoImage(self.image)
            w, h = self.image.size
            self.canvas.config(width=w, height=h)
            if self.canvas_image is None:
                self.canvas_image = self.canvas.create_image(0, 0, anchor=tk.NW, image=self.tkimage)
            else:
                self.canvas.itemconfig(self.canvas_image, image=self.tkimage)

            self.root.after(10, self._refresh_screen)

        def run(self):
            self._refresh_screen()
            self.root.mainloop()

    s = Screen()

    adb.use_openstf(enabletouch=True)#, on_screenchange=s.refresh_screen)
    img = adb.screenshot()
    while img is None:
        time.sleep(1)
        img = adb.screenshot()

    s.run()