창 제목을 지정하고 이 영역만 정기적으로 저장합니다.

6485 단어 WindowsPythonPyQt
Python의 OpenCV로 어떤 (실시간) 편리한 것을 만들 때.
의욕적으로 좌절하는 이유는 주로 다음과 같은 두 가지가 있다.
  • OpenCV 검측 대상을 위한 검측기 제작 능력(열량)이 없음 → 간단한 제작 도구가 있음 → 학습용 이미지 대량 수집에 좌절
  • 화면 포착 시 창을 지정할 수 없으며 화면 전체를 얻을 수 없음
  • 아마도 후자일 거예요. 매번'이런 일도 (간단하게) 할 수 없나요?'를 포기하고 드디어 좀 진전됐어요.
    python이 없는 컴퓨터에서 사용하고 싶어서 구축해 봤어요.
    Releases · khsk/Python-App-Capture

    환경 확인

  • Python 2.7 (WinPython-32bit-2.7.10.3)
  • Spyder3.0.0(별도)
  • PyQt4
  • Windows7
  • cx_Freeze
  • 화면 포착의 어려움


    Python으로 잡으려면 대부분 ImageGrab일 거예요.나는 내가grab()에 도착할 수 있다고 생각한다.
    그리고 전체 화면이나xy(계산)를 줘야 한다는 걸 알면 실망하지 않을까요.
    더 열심히 조사하면 이번 Selenium,pywinauto,winxpgui 등은 자동화의 범주가 되어 응용 프로그램 시작 → 프로그램 같은 것을 포착하는 데 걸리고 사용자가 조작하는 것을 간단하게 대상으로 하는 보도를 찾기 어렵다.
    그곳에서 아무리 노력해도 그 소음에 져서 포기했다.
    원하는 동작으로 프로세스 이름 (~.exe) 을 지정하면 이 창 정보를 얻을 수 있습니다. 범위에 지정된 창 크기 등에 사용됩니다.
    아니면 [Alt]+[Print Screen].
    그런데 요즘
    Python에서 창 핸들 열거(Windows) - Qiita
    발견, 찾은 일에 가까워진 것 같은데, win32api, C++?이런 분야에서 기억하는 게 많을 것 같은데.. 어려워 보이는데.. 망설였지만 바로 이것을 조사해 보겠습니다.
    Python으로 창 제목에서 핸들 가져오기!
    찾아라, 과정이 아니라 제목 이름이 허용된다, 이렇게 추상화하면 자신도 만질 수 있다!나는 분발했다.
    내용의 코드도 읽을 수 있는 수준은 매우 간단하다.

    지정한 창의 코드 저장

    
    import cv2
    import pyws as m
    import numpy as np
    import winxpgui
    
    try :
        handle = m.getid('ウィンドウ名(一部でも化)')
        rect = winxpgui.GetWindowRect(handle)
    except IndexError as e:
        return
    img = ImageGrab.grab(rect)
    img = np.asarray(img)
    img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
    cv2.imwrite('保存先/' + datetime.now().strftime("%Y%m%d%H%M%S") + '.jpg', img)
    
    
    간단하게 완성했습니다!
    핸들 스냅에서 참조pyws 이미지 식별winxpgui.GetWindowRect 창 전체, 화면의 좌표winxpgui.GetClientRect 프로그램의 묘사 영역의 크기를 되돌려주는 것 같아서pyws에서 winxpgui.GetWindowRect, 크기winxpgui.GetClientRect를 사용하여 포착의 시작점을 계산합니다.
    아마도 전체 화면으로 진행할 수 있지만, 이곳의 환경에서는
    창을 포함하는 왼쪽 상단에서 묘사 영역의 크기만 포착
    창의 오른쪽 아래에 없습니다.winxpgui.GetClientRect 절대 좌표를 몰라요.
    프로그램의 묘사 부분만 얻기 위해서는 창 부분의 여분을 수동으로 포함해야 한다고 생각합니다. 맛이 없기 때문에 창을 포함한 전체를 얻기로 했습니다.

    Qt화


    얻었기 때문에 이후while 순환을 조립했습니다. 만약에 수동으로 간격과 제목과 원본 코드를 엉망진창으로 만들면 자신의 용도는 이루어지지 않지만 매번 끝나고 시작하는 것은 번거롭습니다. 순환의 시작에 변수의 스위치(if continue)를 넣고 응용 프로그램의 단추로 열고 닫으면 쉽습니다. Qt를 터치해 보십시오.
    그 결과 while 순환과 변수 스위치로 만들고 싶은 것을 신호 프로그래밍과 QTimer이라는 아주 좋은 것으로 썼고, 코드를 만들고 싶은 부분마다 형태를 만들 수 있어서 좋은 일이 끊이지 않았다.
    화면을 옮기지 않는 수준이지만 Qt의 라이브러리 규모로 볼 때 생각보다 간단하다(거의 복제)

    입력란을 만들면 지난번에 끝났을 때의 값을 복원하지 않으면 원본 개작보다 더 많은 시간이 걸리기 때문에 설정 파일의 읽기와 쓰기를 천천히 기억합니다.
    …Qt5…?

    쓸모가 있습니까?


    안돼.
    키쿠 등 무료 앱이 더 많기 때문이다.
    그러나 저장이 다른 처리로 바뀌었기 때문에
  • 이미지 수집
  • 수집된 이미지로 검출기
  • 저장 위치를 검측기 처리로 바꾸기
  • 모범 사례를 찾습니다.태그 요소의 표시 속성을 수정합니다.

    참고 자료

  • Python에서 창 핸들 열거(Windows) - Qiita
  • Python으로 창 제목에서 핸들 가져오기!
  • cx_프리즈로 파이썬을 exe-lisz-works로 만들어보도록 하겠습니다.

  • PyQt의 Connect에서 매개 변수가 있는 함수를 전달하는 방법 - drilldripper's blog
    너무 좋아, 살았어.실례에 맡기면 신호를 직접 사용할 수 있는 값입니다.
  • Pillow에서 읽은 데이터를 OpenCV로 변환하여 파란색으로 만들면 - Qiita

  • PyQt로 시작하는 GUI 프로그래밍
    코드, 화면, 적당한 장르(라면 타이머) 덕분에 초보자도 유용할 수 있다.대단해요.
  • PyAutoGUI?pywinauto? | 가루@ 바람처럼 (일기)
  • 좋은 웹페이지 즐겨찾기