사용자 도구

사이트 도구


project:detectsponsor

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판이전 판
다음 판
이전 판
project:detectsponsor [2013/07/08 09:38] – [결과 분석] ::1project:detectsponsor [2014/10/09 21:24] (현재) – 바깥 편집 127.0.0.1
줄 74: 줄 74:
  
   $ convert -threshold 50% input.png   $ convert -threshold 50% input.png
 + 
 'threshold가 뭐야?' 라고 궁금해 하실 분들이 있을 지 모르겠습니다. Threshold란 사전적 의미 그대로는 '한계점, 기준치, 문턱'입니다. "어떤 값이 기준치를 넘겼다, 넘기지 못했다"라고 말할 때의 그 '기준치'를 말합니다. (이미지 출처: http://www.svi.nl/SeedAndThreshold) 'threshold가 뭐야?' 라고 궁금해 하실 분들이 있을 지 모르겠습니다. Threshold란 사전적 의미 그대로는 '한계점, 기준치, 문턱'입니다. "어떤 값이 기준치를 넘겼다, 넘기지 못했다"라고 말할 때의 그 '기준치'를 말합니다. (이미지 출처: http://www.svi.nl/SeedAndThreshold)
 {{ http://www.svi.nl/wikiimg/SeedAndThreshold_02.png?nolink | threshold  }} {{ http://www.svi.nl/wikiimg/SeedAndThreshold_02.png?nolink | threshold  }}
줄 84: 줄 84:
  
 convert는 입력된 그림파일의 픽셀을 일일이 검사합니다. 보통 픽셀은 보통 0~255의 단계값을 가집니다. 0이면 완전히 검은색, 255면 완전히 밝은 흰색입니다. 위 convert 명령의 예제는 그림의 펙셀에서 밝기 값이 50% 이상인 값은 100% 값을 가지고, 그렇지 못하면 0으로 만들라는 뜻입니다. 보다 알기 쉽게 예를 들어 보도록 하지요 5개의 픽셀이 있습니다. 각 픽셀은 다음과 같은 밝기를 가집니다. convert는 입력된 그림파일의 픽셀을 일일이 검사합니다. 보통 픽셀은 보통 0~255의 단계값을 가집니다. 0이면 완전히 검은색, 255면 완전히 밝은 흰색입니다. 위 convert 명령의 예제는 그림의 펙셀에서 밝기 값이 50% 이상인 값은 100% 값을 가지고, 그렇지 못하면 0으로 만들라는 뜻입니다. 보다 알기 쉽게 예를 들어 보도록 하지요 5개의 픽셀이 있습니다. 각 픽셀은 다음과 같은 밝기를 가집니다.
-  6030, 48, 4090 +  160120, 48, 140230 
-다섯  픽셀 중 가장 높은 값은 90입니다. 90의 50%는 45이므로 위 명령을 이 다섯 픽셀에 대해 수행해 봅니다. +가장 높은 값인 255의 50%는 127.5입니다. 
-  * 60 45 --> 90 +  * 160  127.5 --> 255 
-  * 30 45 --> 0 +  * 120  127.5 --> 0 
-  * 48 > 45 --> 90 +  * 48  < 127.5 --> 0 
-  * 40 < 45 --> 0 +  * 140 >  127.5 --> 255 
-  * 90 45 --> 90+  * 230  127.5 --> 255
 그러므로 결과는  그러므로 결과는 
-  90, 0, 90, 0, 90 +  255, 0, 0, 255, 255 
-모든 픽셀 값이 90, 아니면 0으로 현격하게 갈립니다. 그러면 직접 convert를 그림 파일에 대해 직접 실행한 결과를 보도록 하지요. 대략 97% 정도를 threshold 값으로 주었을 때의 결과입니다.+모든 픽셀 값이 255, 아니면 0으로 현격하게 갈립니다. 그러면 직접 convert를 그림 파일에 대해 직접 실행한 결과를 보도록 하지요. 대략 97% 정도를 threshold 값으로 주었을 때의 결과입니다.
  
 {{ :project:detectsponsor:test01_mono.png?640 |}} {{ :project:detectsponsor:test01_mono.png?640 |}}
줄 113: 줄 113:
 === 첫번째 시도 방법 === === 첫번째 시도 방법 ===
 === 구현 과정 === === 구현 과정 ===
-위 재료를 잘 버무리면 뭐 그런대로 괜찮은 결과가 나오리라 생각했습니다. 첫번째는 거의 쉘 스크립트에 가깝습니다만, 파이썬으로 만들도록 하지요. 쉘 스크립트를 만들면 윈도우 사용자들이 아마 불편하실거에요 ;-) +위 재료를 잘 버무리면 뭐 그런대로 괜찮은 결과가 나오리라 생각했습니다. 첫번째는 거의 쉘 스크립트에 가깝습니다만, 파이썬으로 만들도록 하지요. 쉘 스크립트를 만들면 윈도우 사용자들이 아마 불편하실거에요 ;-) 대신 파이썬이라 할지라도 마치 쉘 스크립트와 유사하게 커맨드 라인을 실행하는 방식으로 1차 구현을 할 생각입니다. 라이브러리를 사용하는 게 아니라요.
-딱히 파이썬에서 라이브러리 정도를 만드는 것이 닌, 명령어를 파이썬이 호출해서 쓰는 매우 심플한 형태로 만들어보았습.+
  
 파이썬에서 외부 명령을 실행하는 가장 간단한 방법 중 하나는 os.system()을 이용하는 것입니다. 이것을 이용해 원본 동영상에서 일정 간격으로 한 프레임을 얻어내고, 그 한 프레임이 스폰서 영상인지 아닌지를 'convert' 프로그램과 'tasseract' 프로그램이 판단하는 것입니다. 정말 무식한 방법입니다만, 현재로서는 스마트한 방법 따위는 머릿속에 떠오르지 않네요. 그리고 정말 이 방법이 동영상에 대해서도 통하는지 의문이구요. 파이썬에서 외부 명령을 실행하는 가장 간단한 방법 중 하나는 os.system()을 이용하는 것입니다. 이것을 이용해 원본 동영상에서 일정 간격으로 한 프레임을 얻어내고, 그 한 프레임이 스폰서 영상인지 아닌지를 'convert' 프로그램과 'tasseract' 프로그램이 판단하는 것입니다. 정말 무식한 방법입니다만, 현재로서는 스마트한 방법 따위는 머릿속에 떠오르지 않네요. 그리고 정말 이 방법이 동영상에 대해서도 통하는지 의문이구요.
줄 273: 줄 272:
  
 === 결과 분석 === === 결과 분석 ===
-tesseract라는 '문자 인식' 과정에 전적으로 의존합니다. threshold의 결과가 그다지 좋지 않았다면 tesseract의 인식률은 많이 떨어져버립니다. +tesseract라는 '문자 인식' 과정에 전적으로 의존합니다. convert -threshold의 결과가 그다지 좋지 않았다면 tesseract의 인식률은 많이 떨어져버립니다. 
-일례로 아래와 같은 그림은 인식이 잘 됩니다. 95%로 threshold한 결과를 덧붙였습니다.+일례로 아래와 같은 스폰서 영상은 비교적 인식이 잘 됩니다. 95%로 threshold한 결과를 덧붙였습니다.
 {{ :project:detectsponsor:shot0002.png?nolink&640 |}} {{ :project:detectsponsor:shot0002.png?nolink&640 |}}
 {{ :project:detectsponsor:shot0002_mono.png?nolink&640  |}} {{ :project:detectsponsor:shot0002_mono.png?nolink&640  |}}
  
-일례로 다음과 같은 그림은 인식에 실패합니다. 마찬가지로 95%로 threshold한 결과를 덧붙였습니다.+반면 아래와 같은 스폰서 영상은 인식에 실패합니다. 마찬가지로 95%로 threshold한 결과를 덧붙였습니다.
 {{ :project:detectsponsor:image_022.png?nolink&640 |}} {{ :project:detectsponsor:image_022.png?nolink&640 |}}
 {{ :project:detectsponsor:image_022_mono.png?nolink&640 |}} {{ :project:detectsponsor:image_022_mono.png?nolink&640 |}}
  
-두 장의 진화된 이미지 중 아래의 것은 인식에 참하게 실패하는군요. 혹시 '제공' 부분만 잘라내서 인식하면 인식이 될까요?+왜 럴까요? 혹시 아래처럼 '제공' 부분만 잘라내서 인식하면 될까요?
 {{ :project:detectsponsor:image_022_crop_mono.png?nolink |}} {{ :project:detectsponsor:image_022_crop_mono.png?nolink |}}
-아닙니다. 인식이 잘 되지 않요. 이것이 인식되게 하려면 threshold를 92%까지 낮춘 후 crop을 해야 인식 되더군요+의외로 잘 되지 않는군요. Threshold를 92%까지 낮춘 후 비슷하게 crop을 해 보았습니다
-아래는 92% threshold와 crop의 결과입니다.+아래는 그림은 92% threshold와 crop한 결과입니다.
 {{ :project:detectsponsor:image_022_92_mono.png?nolink&640 |}} {{ :project:detectsponsor:image_022_92_mono.png?nolink&640 |}}
 {{ :project:detectsponsor:image_022_92_crop_mono.png?nolink |}} {{ :project:detectsponsor:image_022_92_crop_mono.png?nolink |}}
  
-저는 이렇게 결과를 분석했습니다. 인식이 잘 되는 이미지는 배경 이미지가 대부분 threshold를 넘지 않습니다. 이렇게 되면 배경 이미지는 모두 검게 나오고 자막에 쓰인 흰색만 이미지로 나옵니다. tesseract는 이러한 이미지를 잘 인식해 글자로 만듭니다.+이렇게 결과를 분석했습니다. 인식이 잘 되는 이미지는 배경 이미지가 대부분 threshold를 넘지 않습니다. 이렇게 되면 배경 이미지는 모두 검게 나오고 자막에 쓰인 흰색만 이미지로 나옵니다. tesseract는 이러한 이미지를 잘 인식해 글자로 만듭니다.
 그러나 배경 이미지가 비교적 밝은 이미지라면 threshold값을 넘는 픽셀이 많이 발생합니다. 이렇게 threshold가 넘는 값이 많아지면 tesseract의 문자 인식에 상당한 영향을 끼칩니다. 그러나 배경 이미지가 비교적 밝은 이미지라면 threshold값을 넘는 픽셀이 많이 발생합니다. 이렇게 threshold가 넘는 값이 많아지면 tesseract의 문자 인식에 상당한 영향을 끼칩니다.
- 
 {{ :project:detectsponsor:compare.png?nolink |}}  {{ :project:detectsponsor:compare.png?nolink |}} 
  
 한편 threshold 값 또한 한자의 인식 결과에 큰 영향을 주는 요소로 작용하는 것으로 보입니다. 일반적으로 한자는 영어에 비해 그 인식률이 낮은 것으로 알려져 있습니다. 글자 수도 워낙 많은 데다 모양이 복잡하기 때문이지요. '제공'이라는 글자 주변을 크롭해서 주변에 노이즈가 될 만한 상황을 제거했음에도 불구하고 95% threshold 크롭 버전은 tessesract가 인식하지 못했습니다. 반면 단 3%밖에 차이가 나지 않은 92% threshold 크롭 버전에서는 글자가 인식됩니다. 둘의 차이는 육안으로는 그렇게 도드라지게 보이지 않습니다. 자세히 들여다 보아야  95%쪽 글자 내부에는 듬성듬성 구멍이 많이 뚫려 있다는 것을 알아챌 수 있습니다. 한편 threshold 값 또한 한자의 인식 결과에 큰 영향을 주는 요소로 작용하는 것으로 보입니다. 일반적으로 한자는 영어에 비해 그 인식률이 낮은 것으로 알려져 있습니다. 글자 수도 워낙 많은 데다 모양이 복잡하기 때문이지요. '제공'이라는 글자 주변을 크롭해서 주변에 노이즈가 될 만한 상황을 제거했음에도 불구하고 95% threshold 크롭 버전은 tessesract가 인식하지 못했습니다. 반면 단 3%밖에 차이가 나지 않은 92% threshold 크롭 버전에서는 글자가 인식됩니다. 둘의 차이는 육안으로는 그렇게 도드라지게 보이지 않습니다. 자세히 들여다 보아야  95%쪽 글자 내부에는 듬성듬성 구멍이 많이 뚫려 있다는 것을 알아챌 수 있습니다.
- 
-<95% crop> 
-{{ :project:detectsponsor:image_022_crop_mono.png?nolink |}} 
- 
- 
-<92% crop> 
-{{ :project:detectsponsor:image_022_92_crop_mono.png?nolink |}} 
- 
 === 다음을 위한 대책 === === 다음을 위한 대책 ===
 ffmpeg, convert, tasseract, 이렇게 세 가지 커맨드라인 툳을 이용하다보니 각 단계에서 파일 입출력이 발생합니다. 그러다보니 프로그램의 실행속도가 많이 느려질 수 밖에 없겠지요. 이 부분만 해결해도 상당히 속도를 해결할 수 있으리라 생각합니다. ffmpeg, convert, tasseract, 이렇게 세 가지 커맨드라인 툳을 이용하다보니 각 단계에서 파일 입출력이 발생합니다. 그러다보니 프로그램의 실행속도가 많이 느려질 수 밖에 없겠지요. 이 부분만 해결해도 상당히 속도를 해결할 수 있으리라 생각합니다.
project/detectsponsor.1373276332.txt.gz · 마지막으로 수정됨: 2014/10/09 21:23 (바깥 편집)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki