Erstellen Sie mit python wxpython + openCV ein einfaches Videoanalysetool

Agenda

  1. Zuallererst
  2. Demo des fertigen Werkzeugs
  3. Videoanalyse mit openCV
  4. Erstellen Sie eine GUI mit wxpython
  5. Exe mit Pyinstaller

Einführung

Ich wollte einmal wissen, "zu welcher Zeit" und "welche Art von Person herauskommt" im Video. Ich habe mit wxpython und openCV ein einfaches Videoanalyse-Tool erstellt, das ich studiert habe. Ich werde es hier als Memo für mich vorstellen.

Hier herunterladen GitLab ChuntaMovieAnalyzer

Demo des fertigen Werkzeugs

Zunächst vom Demo-Bildschirm des Tools. Geben Sie das Video an und geben Sie den HTML-Bericht aus. Jede Sekunde des Videos wird ein menschliches Gesicht extrahiert und angezeigt. Sie können das Intervall zwischen Sekunden und der maximalen Anzahl von Personen ändern, die in der GUI extrahiert werden sollen.

capture_1.jpg capture_2.jpg

Hier herunterladen GitLab ChuntaMovieAnalyzer

Videoanalyse mit openCV

Die zur Analyse des Videos verwendete Bibliothek ist openCV. Dieses Mal wird ein Bild des Videos als Bilddaten verwendet. Das Gesicht wird anhand der Bilddaten erkannt und zugeschnitten. Die zugeschnittenen Daten werden als Bild für HTML ausgegeben. Ich werde den Code des Teils einführen, der der Punkt zu sein scheint.

Video laden und Bild ausgeben

Das Video wird in Intervallen der angegebenen Anzahl von Sekunden geladen und verarbeitet, wobei die Gesamtzahl der Bilder des Videos und fps (Anzahl der Bilder pro Sekunde) verwendet werden.

def get_sampling_data_list(self, movie_path, report_path, interval_time, max_human, is_advance):
    sampling_data_list = []
    
    cap = cv2.VideoCapture(movie_path)
    
    if not cap.isOpened():
        print('cannot open movie file.')
        return []
    
    #Ermitteln Sie die Gesamtzahl der Frames
    all_frame_cnt = cap.get(cv2.CAP_PROP_FRAME_COUNT)
    
    #Berechnen Sie die Anzahl der zu tastenden Bilder aus der Bildrate
    fps = cap.get(cv2.CAP_PROP_FPS)
    sampling_frame_num = math.floor( fps * interval_time )
    
    frame_cnt = 1
    
    while True:
        cap.set(cv2.CAP_PROP_POS_FRAMES, frame_cnt)
        ret, frame = cap.read()
        
        if ret:
            sampling_data = self.get_sampling_data(frame, frame_cnt, fps, report_path, max_human, is_advance)
            sampling_data_list.append(sampling_data)
            
            frame_cnt = frame_cnt + sampling_frame_num
        else:
            break
    
    return sampling_data_list

Verarbeitung für jeden Frame

1 Bild in Bilddaten konvertieren ⇒ Gesicht aus Bilddaten erkennen ⇒ Trimmen ⇒ Als Bild für HTML ausgeben Die Verarbeitung erfolgt in der Reihenfolge.

def get_sampling_data(self, frame, frame_cnt, fps, report_path, max_human, is_advance):
    data = sampling_data(frame_cnt, fps)
    
    face_cascade = cv2.CascadeClassifier(resourcePath('cascade/haarcascade_frontalface_default.xml'))
    src_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    faceInfoList = face_cascade.detectMultiScale(src_gray)
    
    human_cnt = 0
    
    for x, y, w, h in faceInfoList:
        #Verlassen Sie die Schleife, wenn die maximale Anzahl von Personen überschritten wird
        if human_cnt >= max_human:
            break
        
        #Trimmen
        img_trim = frame[y:(y + h), x:(x + w)]
        
        data2 = None
        
        data2 = human_data()
        
        #Erstellen Sie einen Ordner für die Bildausgabe
        if False == os.path.exists(report_path + '/img'):
            os.mkdir(report_path + '/img')
        
        #Bildausgabe
        file_name = str(frame_cnt) + '_' + str(human_cnt) + '.jpg'
        cv2.imwrite(report_path + '/img/' + file_name, img_trim)
        data2.set_img_src(report_path, file_name)
        
        data.append_human_data(data2)
        
        human_cnt = human_cnt + 1
    
    return data

GUI-Erstellung mit wxpython

Die Quelle des GUI-Teils. Ich werde den Code des Teils einführen, der der Punkt zu sein scheint.

Videoanalyseverarbeitung Anrufverarbeitung

Da der Videoanalyseprozess einige Zeit in Anspruch nimmt, ist er beschäftigt, sofern er nicht asynchron aufgerufen wird. Um dies zu vermeiden, ist der aufrufende Teil asynchron.

import threading
#Thread Kick, um zu verhindern, dass der Bildschirm einfriert, da die Verarbeitung lange dauert
analysis_thread = threading.Thread(target=exec_analyze, args=(self.analysis, self.btn, movie_path, interval_time, max_human, is_advance, token, report_path))
analysis_thread.start()
def exec_analyze(analysis, btn, movie_path, interval_time, max_human, is_advance, token, report_path):
    analysis.analyze(movie_path, int(interval_time), int(max_human), is_advance, token, report_path)
    
    wx.MessageBox('Die HTML-Datei wurde in den angegebenen Ordner ausgegeben.', 'Bearbeitung abgeschlossen')

exe Umwandlung

Ich habe Pyinstaller bei der Konvertierung in exe verwendet. Es war notwendig zu entwickeln, wenn die externe Ressource in exe eingeschlossen wurde. Es wurde unter Bezugnahme auf die folgende Stelle durchgeführt.

Referenzierte URL Erstellen Sie mit Pyinstaller eine Exe mit Ressourcen

Führen Sie an der Eingabeaufforderung Folgendes aus

pyinstaller --onefile --icon=icon.ico -n chuntaMovieAnalyzer view_gui.py

Bearbeiten Sie die erstellte Spezifikationsdatei und führen Sie an der Eingabeaufforderung erneut Folgendes aus

pyinstaller chuntaMovieAnalyzer.spec

Hier herunterladen GitLab ChuntaMovieAnalyzer

Recommended Posts

Erstellen Sie mit python wxpython + openCV ein einfaches Videoanalysetool
Erstellen Sie ein Verzeichnis mit Python
Erstellen Sie eine virtuelle Umgebung mit Python!
Erstellen Sie mit VSCode & Docker Desktop eine einfache Python-Entwicklungsumgebung
Erstellen Sie eine gestreifte Illusion mit Gammakorrektur für Python3 und openCV3
Erstellen Sie mit Python und OpenCV ein einfaches OMR (Mark Sheet Reader)
Erstellen Sie einen Videoplayer mit PySimpleGUI + OpenCV 3 Hinzufügen einer Maskenfunktion
Erstellen Sie ein USB-Boot-Ubuntu mit einer Python-Umgebung für die Datenanalyse
Erstellen einer einfachen Power-Datei mit Python
Erstellen Sie einen Videoplayer mit PySimpleGUI + OpenCV
Erstellen Sie mit Python + PIL ein Dummy-Image.
Speichern Sie Videos Frame für Frame mit Python OpenCV
Maschinelles Lernen mit Python (2) Einfache Regressionsanalyse
Erstellen verschiedener Photoshop-Videos mit Python + OpenCV ③ Erstellen Sie verschiedene Photoshop-Videos
Erstellen Sie eine einfache Web-App mit Flasche
Erstellen Sie mit Python 3.4 einen Worthäufigkeitszähler
Ich habe mit Python einen einfachen Blackjack gemacht
Erstellen Sie mit Mecab aus Python3 ein Tool, das Furigana automatisch mit HTML schüttelt
Erstellen Sie mit tkinter [Python] einen Rahmen mit transparentem Hintergrund.
Erstellen Sie mit Minette für Python einen LINE BOT
Erstellen Sie eine virtuelle Umgebung mit conda in Python
Erstellen Sie eine Seite, die unbegrenzt mit Python geladen wird
Starten Sie mit Docker einen einfachen Python-Webserver
[Hinweis] Erstellen Sie mit Python eine einzeilige Zeitzonenklasse
Sie können auch mit Python problemlos eine GUI erstellen
Erstellen Sie eine Farbleiste mit Python + Qt (PySide)
Erstellen Sie in Python ein einfaches Momentum-Investmentmodell
Erstellen Sie mit Python einen Entscheidungsbaum von 0 (1. Übersicht)
Erstellen Sie eine neue Seite im Zusammenfluss mit Python
Erstellen Sie mit Python + Qt (PySide) ein farbspezifisches Widget.
Einfache Aufgabenliste, erstellt mit Python + Django
Erstellen Sie mit Python eine Datei im Photoshop-Format (.psd)
Einfache Erstellung von Verkaufstools mit Python-GUI: Schätzung erstellen
Erstellen Sie einfach eine Python-Konsolenanwendung mit Click
Erstellen Sie ein Übersetzungswerkzeug mit dem Translate Toolkit
Erstellen wir ein einfaches Empfangssystem mit dem serverlosen Python-Framework Chalice und Twilio
Datenanalyse mit Python 2
Binarisierung mit OpenCV / Python
Sprachanalyse mit Python
Erstellen Sie eine Python-Umgebung
Sprachanalyse mit Python
Datenanalyse mit Python
Lassen Sie uns ein Befehls-Standby-Tool mit Python erstellen
[OpenCV / Python] Ich habe versucht, Bilder mit OpenCV zu analysieren
[Python] Generieren Sie ValueObject mit dem vollständigen Konstruktor mithilfe von Datenklassen
Erstellen Sie einen einfachen Slackbot mit einer interaktiven Schaltfläche in Python
Warum nicht einfach mit Python eine stilvolle Tabelle erstellen?
Erstellen Sie eine Python-Entwicklungsumgebung mit Vagrant + Ansible + Fabric
Versuchen Sie, ein einfaches Spiel mit Python 3 und iPhone zu erstellen
Erstellen Sie verschiedene Photoshop-Videos mit Python + OpenCV. ④ Beheben Sie Probleme
Berechnen Sie den Regressionskoeffizienten der einfachen Regressionsanalyse mit Python
Probleme beim Erstellen eines CSV-JSON-Konvertierungstools mit Python
Füllen Sie den Hintergrund mit einer einzigen Farbe mit OpenCV2 + Python
Erstellen Sie mit Python Pandas Py Installer ein CSV-Formatierungswerkzeug
Erstellen Sie in Docker eine Ebene für AWS Lambda Python
[Python] Erstellen Sie mit np.arange ein Datumsarray mit beliebigen Inkrementen
Erstellen verschiedener Photoshop-Videos mit Python + OpenCV ② Erstellen Sie Photoshop-Standbilder
[Python] So erstellen Sie mit Matplotlib ein zweidimensionales Histogramm
[Python] Erstellen Sie mit cx_Freeze eine Verteilungsdatei für das Tkinter-Programm
Was ist Gott? Erstelle einen einfachen Chatbot mit Python