#!/usr/bin/python # -*- coding: utf-8 -*- import multiprocessing as mp import os import time import sys def parse_argv(argv): if len(argv) != 2: print "Usage: detect_sponsor.py " sys.exit(1) return argv[1] def ts2sec(ts): h = int(ts[0:2]) * 3600 m = int(ts[3:5]) * 60 s = int(ts[6:8]) return h + m + s def sec2ts(sec): s = sec % 60 sec /= 60 m = sec % 60 sec /= 60 h = sec return '%02d:%02d:%02d' % (h, m, s) def make_time_sequence(file_name, start_time, end_time, timestep): st_sec = ts2sec(start_time) ed_sec = ts2sec(end_time) sequence = [(file_name, sec2ts(x)) for x in range(st_sec, ed_sec, timestep)] return sequence def detect_sponsor(file_name): sequence = make_time_sequence(file_name, "00:01:20", "00:05:00", 3) pool = mp.Pool(mp.cpu_count() * 2) results = pool.map(core_func, sequence, len(sequence)/4) pool.terminate() pool.join() #results = [core_func(x) for x in sequence] for r in results: if r[1] == True: print "found sponsor text in", r[0] return print 'no sponsor text found' def core_func(seq): # 영상 파일의 1분 20초부터 5분 00초까지 # 매 3초당 스크린샷을 추출한다. file = seq[0] ts = seq[1] path = './img/image_%s.png' % ts cmd = 'ffmpeg -ss %s -i \"%s\" -f image2 -vframes 1 -vcodec png %s' % (ts, file, path) os.system(cmd) # 추출된 파일의 threshold를 대략 95% 정도 주어서 이진화시킨다. thresh_file = './mono_%s.png' % ts conv_cmd = 'convert -threshold 95%% %s %s' % (path, thresh_file) os.system(conv_cmd) # 이진화된 영상에 tasseract 일본어를 적용시킨다. result_file = './result_%s' % ts ocr_cmd = 'tesseract %s %s -l jpn' % (thresh_file, result_file) os.system(ocr_cmd) ret = False with open(result_file+'.txt', 'r') as f: first_line = f.readline() if first_line.strip() == '提 供': print result_file, 'has sponsor text!' ret = True os.remove(thresh_file) os.remove(result_file+'.txt') return (ts, ret) def main(argv = None): file_name = parse_argv(argv) detect_sponsor(file_name) if __name__ == '__main__': sys.exit(main(sys.argv))