Aloha!
Ich hab mich mal aus Interesse in perceptual hashes eingelesen (toller Artikel: http://www.hackerfactor.com/blog/index.php?/archives/432-Looks-Like-It.html) und möchte das jetzt auch mal etwas weiter treiben und auf Videos anwenden.
Damit's erst mal schnell zu schreiben geht, habe ich einen leicht abgewandelten pHash Algorithmus in Python implementiert. Das klappt auch schon mal ganz fein, allerdings stehe ich nun vor dem Problem, dass es offenbar gar nicht so leicht wie gedacht ist, ein Video frameweise zu zerlegen (z.B. da oft bei neuen Codecs nur Keyframes vorhanden sind etc.).
Bisher habe ich das bei meinen Tests einfach per "Dateispam" erledigt:
spuckt mir einfach alle Frames in 32x32 auf die Platte, fein skaliert und in Graustufen.
Was ich nun erreichen möchte, ist mit ffmpeg das Video schon mal wenigstens in ein Format zu wandeln, das ich dann mit OpenCV lesen kann (scipy/numpy scheinen max. mit Bildern umgehen zu können leider). Idealerweise pipe ich das Video gleich direkt an meine Hashfunktion weiter, ohne eine Datei auf die HDD schreiben zu müssen - allerdings spuckt mir da OpenCV in die Suppe: http://opencv.willowgarage.com/docu...writing_images_and_video.html#capturefromfile verlangt einen Dateinamen und anscheinend existiert /dev/stdin nicht unter Windows...
Momentan verwende ich nur scipy und numpy, OpenCV habe ich aber mal testweise schon installiert, es ging dann aber schon mit numpy und scipy das für Bilder zu berechnen...
Irgendwelche Tipps/Hinweise wie man das besser lösen könnte (gerne auch ohne OpenCV!) sind gern gesehen!
Ich hab mich mal aus Interesse in perceptual hashes eingelesen (toller Artikel: http://www.hackerfactor.com/blog/index.php?/archives/432-Looks-Like-It.html) und möchte das jetzt auch mal etwas weiter treiben und auf Videos anwenden.
Damit's erst mal schnell zu schreiben geht, habe ich einen leicht abgewandelten pHash Algorithmus in Python implementiert. Das klappt auch schon mal ganz fein, allerdings stehe ich nun vor dem Problem, dass es offenbar gar nicht so leicht wie gedacht ist, ein Video frameweise zu zerlegen (z.B. da oft bei neuen Codecs nur Keyframes vorhanden sind etc.).
Bisher habe ich das bei meinen Tests einfach per "Dateispam" erledigt:
Code:
ffmpeg -i Big_Buck_Bunny_1080p.avi -pix_fmt gray -filter scale=32:32 image-%d.png
Was ich nun erreichen möchte, ist mit ffmpeg das Video schon mal wenigstens in ein Format zu wandeln, das ich dann mit OpenCV lesen kann (scipy/numpy scheinen max. mit Bildern umgehen zu können leider). Idealerweise pipe ich das Video gleich direkt an meine Hashfunktion weiter, ohne eine Datei auf die HDD schreiben zu müssen - allerdings spuckt mir da OpenCV in die Suppe: http://opencv.willowgarage.com/docu...writing_images_and_video.html#capturefromfile verlangt einen Dateinamen und anscheinend existiert /dev/stdin nicht unter Windows...
Momentan verwende ich nur scipy und numpy, OpenCV habe ich aber mal testweise schon installiert, es ging dann aber schon mit numpy und scipy das für Bilder zu berechnen...
Irgendwelche Tipps/Hinweise wie man das besser lösen könnte (gerne auch ohne OpenCV!) sind gern gesehen!