Script collector quotes and recognition of text from video to Python

    A post about a script that downloads videos from youtube and recognizes text in it. I decided to start right away with practical implementation. "Vdudictionary" - Script collector quotes collection of characters "Vood" in Python. Yury Dud and his project “Vood” need no introduction. The hottest interviews that are fun to watch. Yuri Alexandrovich is able to make an interesting show, regardless of whether you know the hero of a particular release, are you a fan, or hear this name for the first time.

    How many cm do you have? What do you say to Putin? Do you listen to OXY?


    These and many other questions are now associated with Dud. When an interviewee utters a phrase full of wisdom, caring editors carefully display it on the screen of our monitors with you in order to convey the whole point to us. My goal was to crystallize this wisdom of generations and create the dictionary “Vududexicon” or “Vdudictionary”.

    Naturally, a person, even if he is not burdened with a specific IT background, should not collect these sayings with his hands. To do this, I sketched a script in python.



    First of all, we need a file that we will process. For downloading videos from Youtube, I used the pytube module.

    pip install pytube

    An example of downloading a file from youtube

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

    File downloaded. Now we will begin to methodically identify frames with a concentrated meaning, with the wisdom of contemporaries, with the sayings of the heroes of our time.



    In the old issues there was no rectangular plate, so we can search for text at the bottom of the screen. In new releases, you can use the same good old OpenCV to search for a rectangle, which will allow you to get a frame from the video.

    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)
    

    To install cv2 for python3 on raspberry3 I had to install many packages due to dependencies. Perhaps some packages are redundant, this is because of my inexperience, this is how it all started.

    
    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
    

    We put tesseract - this is an OCR engine, necessary for optical text recognition.

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

    The releases use a very specific headset, which makes it difficult to recognize. In general, to install Cyrillic Dictionary . Download and transfer to / usr / share / tesseract-ocr / tessdata.



    The input script gets the clip address on youtube. Downloads a file, starts processing one frame at a time in 5 seconds. If there is a square in the frame, cut it out, discolor it, increase the contrast and recognize it. If the string is less than 15 characters, do not consider it. You can, of course, use a string of less than 15 characters, but as one of the heroines of the program said: “
    I don't know, boys, how you live with small strings.

    Log in the log file text, time and a link at the time on youtube. We skip 5 seconds (do not ask why it was this figure that first came to mind, checking did not find the overlay of two quotes within this time). You can delete the video file and proceed to the next release.

    Full script code:

    Python 3 Script
    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=["*","/","|","\\",")","(","}","{","+","`","~","№","",":","$","#","@","%","[","]","&","^","'  "]
    defudaleniesimvolov(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()
    


    Script work example
    Толоконникова — бисексуальность, 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»" “
    «РЭП- ЭТО ОСМЫСЛЕНИЕ РЕАЛЬНОСТИ»


    The script obviously has some problems with the recognition of the “specific” WILD-font. I see the solution to this problem in the finalization of the dictionary file for OCR and in the post-processing of text through PyEnchant.

    With a slight refinement, this script can be used to search for embedded subtitles, their recognition and automatic translation into another language.

    If you can contribute to Yuri finding out about this experiment, please do so without delay. #habr #vdudictionary VK , FB .

    Thanks for attention! The script and the post came out as a result of the flight of fancy when exploring OpenCV for my robot project for collecting golf balls .

    Only registered users can participate in the survey. Sign in , please.

    How should a dictionary be called?


    Also popular now: