'동영상서치'에 해당되는 글 1건

  1. 2015.10.21 [Ahk+] ImageSearch 예문1 - 동영상에서 이미지 찾기

 

ImageSearch 명령어 확장기능 설명 바로가기

 

 

이번 예제 스크립트는 '다음팟 플레이어' 를 이용한 동영상 속 이미지를 검색하는 방법입니다. 팟플레이어는 단축키(Ctrl+C)로 현재 프레임의 원본 이미지를 클립보드에 저장 할 수 있습니다. 이걸 이용해 동영상에서 검색할 이미지를 찾는 방법을 알아보겠습니다.

 

간혹 단축키가 다를 수 있습니다.

단축키 확인 방법 : 메뉴 -> 영상 -> 영상 캡쳐 -> 현재 화면 복사(원본크기)  Ctrl+C

 

 

 

 

찾아야할 이미지 만드는 법 : 동영상 재생 후 이미지가 있는 프레임에서 '현재 화면 복사' 단축키를 사용해 이미지를 캡춰 한 후 그림판에 붙여넣기 후 필요한 이미지를 잘라내면 됩니다.

 

1. 이 스샷은 동영상에서 찾아낼 이미지를 표시 한 스샷입니다.

 

 

 

2. 아래 스샷은 동영상 재생 중 검색대상 이미지를 발견에 성공했을때를 찍은 스샷입니다. 검색성공시 '스페이스' 키로 바로 재생을 멈추게 해봤습니다.

 

검색대상 위치가 비어있는 이유는 클립보드를 통한 이미지서치가 동영상 재생보다 더 빨라서 입니다. 다시 재생 시키면 바로 해당위치에 검색대상이미지가 나타나는걸 볼수 있습니다.

 

 

 

Test.ahk 파일을 다운로드한  'Ahk+ 전용 AutoHotkey.exe 파일'  위에 드래그해서 실행하세요.

팟플레이어_동영상이미지서치_Test.zip

 

 

 

<스크립트>

 

searchImg = 찾는이미지.bmp
movieFile = TestMovie.avi

 

;매크로 종료
F2::ExitApp

 

;동영상 감시 시작
F1::
  ;레지스트리에서 팟플레이어 설치경로 얻기
  RegRead, player_path, HKCU, Software\DAUM\PotPlayer, ProgramPath
  if !player_path
  {
    MsgBox, 팟플레이어 등록정보를 찾을 수 없어 프로그램을 종료합니다.
    ExitApp
  }
  
  ;팟플레이어 실행
  Run, "%player_path%" "%movieFile%"
  sleep, 2000

 

  loop
  {
    ;팟플레이어 체크
    IfWinNotActive, ahk_class PotPlayer
    {
      sleep, 100
      WinActivate, ahk_class PotPlayer
      continue
    }
    
    ;팟플레이어 '현재프레임 클립보드로 복사' 단축키 체크하세요 : Ctrl+C
    Send, ^c
    
    ;압축률 또는 해상도가 높은 동영상은 sleep을 충분히 걸어줘야 팟플레이어에 렉이 안생깁니다.
    sleep, 100
   
    hBitmap := CreateHBitmapFromClipboard()

 

    ;*TargetHBmp 옵션은 HBITMAP 핸들의 비트맵을 이미지서치 대상으로 설정하며

    ;이미지서치 명령 후 비트맵 핸들을 자동 초기화 시키는 옵션입니다.
    ImageSearch, sx,sy, 0,0,0,0, *TargetHBmp%hBitmap% *50 %searchImg%
    if !ErrorLevel
    {
      ;이미지서치 성공시 팟플레이어 일시정지
      Send, {Space}
     
      MsgBox % "found = " sx "," sy
      ExitApp
    }
  }
return

 

;클립보드 이미지를 HBITMAP 으로 반환

CreateHBitmapFromClipboard()
{
  If DllCall("IsClipboardFormatAvailable", UInt,2 )
    DllCall( "OpenClipboard", UInt,0 ), tBM := DllCall("GetClipboardData", UInt,2 )
    , hBM := DllCall( "CopyImage", UInt,tBM, UInt,0, Int,0,Int,0, UInt,0x2000, UInt )
    , DllCall( "CloseClipboard" )
  return hBM ? hBM : 0
}

 

 

 

 

 

 

 

 

 

Posted by 와이로