04.11.2018       Выпуск 254 (29.10.2018 - 04.11.2018)       Статьи

Скрипт сборщика цитат и распознания текста из видео на Python

Пост о скрипте, который скачивает видео с youtube и распознает в нем текст. Начать решил сразу с практической реализации. «Vdudictionary» — Скрипт сборщика сборника цитат героев «Вдудь» на Python. Юрий Дудь и его проект «Вдудь» не нуждается в представлении. Самые горячие интервью, которые интересно смотреть. Юрий Александрович умеет сделать интересное шоу, независимо от того, знаете ли Вы героя конкретного выпуска, являетесь его фанатом или впервые слышите это имя.

Читать>>




Экспериментальная функция:

Ниже вы видите текст статьи по ссылке. По нему можно быстро понять ссылка достойна прочтения или нет

Просим обратить внимание, что текст по ссылке и здесь может не совпадать.

Пост о скрипте, который скачивает видео с youtube и распознает в нем текст.

Начать решил сразу с практической реализации. «Vdudictionary» — Скрипт сборщика сборника цитат героев «Вдудь» на Python. Юрий Дудь и его проект «Вдудь» не нуждается в представлении. Самые горячие интервью, которые интересно смотреть. Юрий Александрович умеет сделать интересное шоу, независимо от того, знаете ли Вы героя конкретного выпуска, являетесь его фанатом или впервые слышите это имя.

Сколько у Вас см? Что Вы скажете Путину? Слушаете ли Вы OXY?

Эти и многие другие вопросы теперь ассоциируются с Дудем. Когда интервьюируемый произносит фразу преисполненную мудростью, заботливые монтажеры аккуратно выводят ее на экран наших с Вами мониторов, чтобы донести до нас всю суть. Моей целью было закристаллизовать эту мудрость поколений и создать словарь «Вдудексикон» или «Vdudictionary».

Естественно человеку, пусть и не обремененного специфическим IT бэкграудом, не надлежит руками собирать эти изречения. Для этого я набросал скрипт на python.

Первым делом нам нужен файл, который будем обрабатывать. Для скачивания видео с Youtube я использовал модуль pytube.

pip install pytube

Пример скачивания файла с youtube

from pytube import YouTube
a=YouTube('https://www.youtube.com/watch?v=RNbXm8WKmow')
a.streams.first().download()

Файл скачали. Теперь начнем методично определять кадры с концентрированным смыслом, с мудростью современников, с изречениями героев нашего времени.

В старых выпусках не было прямоугольной плашки, поэтому мы можем искать текст в нижней части экрана. В новых выпусках можно для поиска прямоугольника можно использовать тот же старый добрый OpenCV, который позволит получить кадр из видео.

a,contours,h = cv2.findContours(gray3, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
for i in contours:
    cv2.drawContours(gray3,[i],0,(0,0,255),1)

Для установки cv2 для python3 на raspberry3 пришлось установить много пакетов из-за зависимостей. Возможно, некоторые пакеты избыточны, это из-за моей неопытности, именно так все завелось.


sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get -y install libopencv-dev
sudo apt-get -y install build-essential checkinstall cmake pkg-config yasm
sudo apt-get -y install libtiff4-dev libjpeg-dev libjasper-dev
sudo apt-get -y install libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev libxine-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev
sudo apt-get -y install python-dev python-numpy
sudo apt-get -y install libtbb-dev
sudo apt-get -y install libqt4-dev libgtk2.0-dev
sudo apt-get -y install libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev
pip install opencv-python

Ставим tesseract — это OCR движок, необходимый для оптического распознавания текста.


sudo apt-get install tesseract-ocr
sudo pip3 install pytesseract
sudo pip3 install tesseract

В выпусках используется весьма специфическая гарнитура, это затрудняет распознание. Вообще же для кириллицы устанавливаем

словарь

. Скачиваем и переносим в /usr/share/tesseract-ocr/tessdata.

Скрипт на входе получает адрес ролика на youtube. Скачивает файл, начинает обрабатывать по одному кадру в 5 секунд. Если в кадре есть квадрат, вырезаем его, обесцвечивает, повышаем контрастность и распознаем. Если строка меньше 15 символов, не учитываем ее. Можете, конечно, использовать и строку меньше 15 символов, но как сказала одна из героинь передачи:

-Я не знаю, пацаны, как Вы живете с маленькими строками.

Заносим в лог файл текст, время и ссылку на момент на youtube. Пропускаем 5 секунд( не спрашивайте почему именно эта цифра первой пришла в голову, проверив не нашел наложения двух цитат в пределах этого времени). Можно удалить файл видео и приступить к следующему выпуску.

Полный код скрипта:
Скрипт на Python 3
import cv2
import pytesseract
import numpy as np
from pytube import YouTube
import os

nameofvideo="RNbXm8WKmow"

a=YouTube('https://www.youtube.com/watch?v='+nameofvideo)
a.streams.first().download()
title=a.title
title2=title.replace("/","").replace(",","").replace(".","")+".mp4"
os.rename(title2, "youtubefile.mp4")
print(title)
f=open('/var/www/python/'+str(nameofvideo)+'.txt','w')
f.write(title+"<br>")
f.write('<table><tr><td>Время</td><td>Цитата</td><td>Ссылка</td></tr>')

spisoksimvolovpodudalenie=["*","/","|","\\",")","(","}","{","+","`","~","№","",":","$","#","@","%","[","]","&","^","'  "]
def udaleniesimvolov(stroka):
	for element in spisoksimvolovpodudalenie:
		stroka=stroka.replace(element,"")
	return stroka

vidcap = cv2.VideoCapture('youtubefile.mp4')
vidcap.set(cv2.CAP_PROP_POS_AVI_RATIO,1)
durationsec=int(vidcap.get(cv2.CAP_PROP_POS_MSEC)/1000)
print("duration: "+str(durationsec)+" sec")

for thissec in range(0,durationsec,5):
	vidcap.set(cv2.CAP_PROP_POS_MSEC,thissec*1000)
	success,image = vidcap.read()
	gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
	gray2 = cv2.addWeighted( gray, 1.5, gray, 0, 0.5)
	gray3 = gray2[450:670,0:1280]
	if success:
		print(str(thissec)+" sec.")
		text = udaleniesimvolov(pytesseract.image_to_string(gray3, lang='rus'))
		if len(text)>15:
			print (text)
			f.write('<tr><td>'+str(thissec)+'</td><td>'+text+'</td><td><a href="https://www.youtube.com/watch?v='+nameofvideo+"&t="+str(thissec)+'">Ссылка</a></td></tr>')
		print("----")
f.write('</table>')
f.close()
Пример работы скрипта

Толоконникова — бисексуальность, FACE, тюрьма / вДудь

Время, c.Цитата
95«АКТИВИСТЫ НЕ ДОЛЖНЫ НЕНАВИДЕТЬ МЕНТОБ.
ОНИ ДОЛЖНЫ ПОПЫТДТЬСЯ ПОННТЬ,
ЧТО МЕНТА ПОБУДИЛО БЫТЬ МЕНТОМ»



195ПЕТР ВЕРЗИЛОВ — УЧАСТНИК PUSSY RIOT
БЫВШИИ МУЖ НАДЕЖДЫ ТОЛОКОННИКОВОИ


255Екатерина Самуцевич
570ОБОЖАЮ ТРИКОТАЖ!
595' вляДЬМЦР сорбйПн



990ПЕТР ВЕРЗИЛОВ В ЮНОСТИ ЖИЛ В ЯПОНИИ ВМЕСТЕ С РОДИТЕЛЯМИ.
ОТЕЦ ПЕТРА — ФИЗИК-ЯДЕРЩИК


995ПЕТР ВЕРЗИЛОВ В ЮНОСТИ ЖИЛ В ЯПОНИИ ВМЕСТЕ С РОДИТЕЛЯМИ.
ОТЕЦ ПЕТРА — ФИЗИК-ЯДЕРЩИК


127011 СЕНТЯБРЯ 2018 ГОДА ПЕТР внрзипов БЫЛ госпитдлизировдн
в токсикоувднимдционуов ОТДЕЛЕНИЕ
городском клиническом Больницы имени вдхрушиных



127515 СЕНТЯБРЯ БЫЛ ДОСТАВЛЕН ЧАСТНЫМ САМОЛЕТОМ
В БЕРЛИНСКУЮ КЛИНИКУ СНАШТЕ


128018 СЕНТЯБРЯ 2018 ГОДА БЕРЛИНСКИЕ ВРАЧИЗАЯВИПИ
СКОРЕЕ ВСЕГО, ВЕРЗИЛОВ БЫЛ ОТРАВЛЕН СКОПОЛАМИНОМ.
26 СЕНТЯБРЯ БЫЛ ВЫПИСАН ИЗ БЕРЛИНСКОИ КЛИНИКИ



128518 СЕНТЯБРЯ 2018 ГОДА БЕРЛИНСКИЕ ВРАЧИ ЗАЯВИЛИ
СКОРЕЕ ВСЕГО, ВЕРЗИЛОВ БЫЛ ОТРАВЛЕН СКОПОЛАМИНОМ.
26 СЕНТЯБРЯ БЫЛ ВЫПИСАН ИЗ БЕРЛИНСКОИ КЛИНИКИ



1395«МЕДИАЗОНА» — интврнвт-издднив про суды,
АРЕСТЫ и рорсию. основднноЁ в свнтявув 2014 годя
НАДЕЖДОИ тол_оконниковои и МАРИЕИ Алехинои



1590«Если что- то СТРАШНОЕ прейсХЬдиі зі? нЁзндчит, '
что ты ДОЛЖЕН от СЕБЯ откдздтьря»


1760йоко оно — ОБЩЕСТВЕННЫЙ ДЕЯТЕЛЬ, ВДОВА ДЖО " …
ПЕ
ВИЦА, ХУДОЖНИК,



2040«ЕСЛИ У КОГО-ТО БЕЗУМНЫЕ РОДИТЕЛИ,
ЭТО, СКОРЕЕ, ПОВОД ДЛЯ РЕСПЕКТ!-»


2330«ВНРЕННЯЯ МАМА»

2425ГРАД КИТЕЖ — ЗАТОНУВШИЙ ГОРОД,_НАХ0ДИВШИЙСЯ‚ ПО ПРЕДАНИЮ,
В ОЕВЕРНОИ ЧАСТИ НИЖЕГОРОДСКОИ ОБЛАСТИ,
НА БЕРЕГАХ ОЗЕРА СВЕТЛОЯР



2515«мы ЖЕМ ЛОБСЕРА и пОмогд
здключиным и ПИСАТЕЛЯМ»


2550СЕЙЧАС- В ЖЕСТКОЙ ОППОЗИЦИИ РООСИЙ ›. '
ЖИВЕТ И РАБОТАЕТ В США


2745ТОЛОКОННИКОВА ПРОБЫЛА В ТЮРЬМЕ 661 ДЕНЬ.
. С 3 МАРТА 2012 ГОДА ПО 23 ДЕКАБРЯ 2013 ГОДА
У мд.



2985ВПТСН — ТЕРМИН, ОБОЗНАЧАЮЩИЙ НА СЛЕНГЕ
ЛГБТ-СООБЩЕСТВА МУЖЕПОДОБНУЮ ДЕВУШКУ ‘ ‚
00 СТРИЖКОИ «ПОД МАЛЬЁИ_К_А»



2990ВЦТСН — ТЕРМИН, ОБОЗНАЧАЮЩИЙ НА СЛЕНГЕ _
ЛГБТ-СООБЩЕСТВА МУЖЕПОДОБНУЮ ДЕВУШКУ
СО СТРИЖКОИ «ПОД МАЛЬЧИКА»



3280«ТАКАЯ РУССКАЯ РАЗА «НУ ТЫ
;„б?


3290ШИЗО — ШТРАФНОЙ ИЗОЛЯТОР. ОТДЕЛЕНИЕ ИСПРАВИТЕЛЬНОГО УЧРЕЖДЕНИЯ,
ГДЕ РАОПОЛОЖЕНЫ КАМЕРЫ ДЛЯ НАРХШИТЕЛЕИ РЕЖИМА СОДЕРЖАНИЯ.
ЧЕЛОВЕК, ПОМЕЩЕННЫИ В ШТРАФНОИ ИЗОЛЯТОР,
СУЩЕСТВЕННО ОГРАНИЧЕН В ПРАВАХ
‚ь ›, — "





3315«ЧЕЛОВЕК, котбрый долго сидит, «Е;
ПЕРЕПРИДУМЬЩАЕТ свою жизнь здново»; 3


3510ПОСЛЕ АКЦИИ В ХРАМЕ ХРИСТА --'‚ПАСИТЕЛЯ БЫЛИ ЗАДЕРЖАНЫ И
ОСУЖДЕНЫ ТРИ УЧАСТНИЦЫ РПЗЗУ КЮТ
НАДЕЖДА ТОЛОКОННИКОВА, МАРИЯ АЛЕХИНА И ЕКАТЕРИНА САМУЦЕВИЧ



3540ЕКАТЕРИНА САМУЦ
ПОЛУЧИЛА ДВА ГОДА УСЛОВНО


3660«МОЛОДЕЖЬ дико тРАвмируЁ. __
что у ндс НЕТ сЕксудльного оврдзовдния»; ‘


3740НАДЕЖДА ТОЛОКОННИКОВА ДВАЖДЫ ОБЪЯВЛЯЛА ГОЛОДОВКУ
В МОРДОВОКОЙ КОЛОНИИ Н° 14 О ТРЕБОВАНИЕМ ПЕРЕВОДА
В ДРУГОЕ МЕСТО ОТБЫТИЯ НАКАЗАНИЯ



4275РЕЧЬ ПРО АКЦИЙ РПЗЗУ РЮТ СМИЛИЦИОНЕР ВСТУПАЕТ В ИГРУ» _
В ФИНАЛЕ ЧМ-2018 В МОСКВЕ


4495
'
«СОЧЕТАНИЕ ДИЧИ И ПОЗИЦИИ»



4735«ЕСЛИ У МЕНЯ БУДЕТ ПЛОХАЯ РИФМА И ХОРОШАЯ,
Я ВЫБЕРУ ПЛОХУЮ»


4755«ЗООПАРКОВАЯ ИСТОРИЯ»

4800БЕРНИ САНДЕРС — КАНДИДАТ В ПРЕЗИДЕ_НТЫ США
НА ВЫБОРАХ 2016_ОДА. ПРОИГРАЛ ПРАИМЕРИЗ
ДЕМОКРАТИЧЕСКОИ ПАРТИИ ХИППАРИ КЛИНТОН



4820. ЗАДРЦ С ВО
НАСТОЙ'ЁИВОСТЬ
_умвдив говорить нд РАзнБіх языкдх



4865«здльный торчок»

5055»" “
«РЭП- ЭТО ОСМЫСЛЕНИЕ РЕАЛЬНОСТИ»


У скрипта явно есть некие проблемы с распознанием «специфического» ВДУДЬ-шрифта. Я вижу решение данной проблемы в доработке файла словаря для OCR и в постобработке текста через PyEnchant.

При небольшой доработке данный скрипт можно использовать для поиска вшитых субтитров, их распознания и автоматического перевода на другой язык.

Если Вы можете поспособствовать тому, чтобы Юрий узнал об этом эксперименте, просьба сделать это не откладывая. #habr #vdudictionary

ВК

,

FB

.

Спасибо за внимание!

Скрипт и пост получились в результате полета фантазии при изучении OpenCV для моего проекта

робота по сбору мячей для гольфа

.



Лучшая Python рассылка




Разместим вашу рекламу

Пиши: mail@pythondigest.ru

Нашли опечатку?

Выделите фрагмент и отправьте нажатием Ctrl+Enter.

Система Orphus