Re: [Twisted-Python] maybe video

2014-02-26 Thread Laurens Van Houtven
Hi Kevin,


Thanks for sharing, always nice to see people doing useful things with
Twisted :-)


lvh
___
Twisted-Python mailing list
Twisted-Python@twistedmatrix.com
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python


[Twisted-Python] maybe video

2014-02-25 Thread kevin mcintyre
Wanted to share my qt4reactor webkit cv2 video capture script.

It's comes in handy whenever I've needed to scrape just the browser and not
my whole screen or capture unit tests etc.

here is a demo quick demo in action:

http://www.youtube.com/watch?v=2XMXtUISY1gfeature=youtu.be

It's a hack, but that's why I like python (espeically twisted)...it's so
versatile.

https://github.com/kmcintyre/scewpt/blob/master/pyscewpt/maybevideo.py

Cheers,
Kevin
from PyQt4.QtGui import QApplication, QKeyEvent, QPainter, QImage
import cv2
import sys

print 'args:', sys.argv
video = None
if len(sys.argv)  2:
print 'start video:', sys.argv[2]
video = cv2.VideoWriter( sys.argv[2] + '.avi',  cv2.cv.CV_FOURCC('M','J','P','G'), 24, (1024, 768),True)

from PyQt4.QtWebKit import QWebView, QWebPage, QWebSettings

class MaybeVideo(QApplication):

# you may need
def spoof_hit_enter(self, receiver):
print 'spoof'
super(MaybeVideo, self).notify(receiver, QKeyEvent(QEvent.KeyPress, Qt.Key_Enter, Qt.NoModifier)) 
super(MaybeVideo, self).notify(receiver, QKeyEvent(QEvent.KeyRelease, Qt.Key_Enter, Qt.NoModifier)) 

painter = QPainter()
events = []
ready = False

def notify(self, receiver, event):
if MaybeVideo.ready and isinstance(receiver, QWebView) and not MaybeVideo.painter.isActive() and video is not None:
try: 
#print 'clip screenshot'   
image = QImage(QSize(1024, 768), QImage.Format_RGB32)
MaybeVideo.painter.begin(image)
MaybeVideo.painter.setRenderHint(QPainter.Antialiasing, True)
MaybeVideo.painter.setRenderHint(QPainter.TextAntialiasing, True)
MaybeVideo.painter.setRenderHint(QPainter.SmoothPixmapTransform, True)
MaybeVideo.painter.setRenderHint(QPainter.HighQualityAntialiasing, True)
receiver.page().mainFrame().render(MaybeVideo.painter)
image.save(temp.jpg, jpg)
video.write( cv2.imread('temp.jpg'))
MaybeVideo.painter.end()
except Exception as e:
print e
if event.type() == QEvent.SockAct:
MaybeVideo.ready = True
elif not event.type() in MaybeVideo.events:
#print 'new type', receiver, event.type(), QEvent.User
MaybeVideo.events.append(event.type())
else:
pass  
return super(MaybeVideo, self).notify(receiver, event)

app = MaybeVideo([])

import qt4reactor
qt4reactor.install()

from PyQt4.QtGui import QMainWindow
from PyQt4.QtCore import QEvent, Qt, QSize, QUrl

from twisted.internet import reactor

import signal

from PyQt4.QtNetwork import QNetworkAccessManager, QNetworkCookieJar

class MaybeVideoWindow(QMainWindow):

def __init__(self, parent=None):
QMainWindow.__init__(self, parent)
self.web_page = QWebPage()

print self.web_page.settings()

self.web_page.setNetworkAccessManager(QNetworkAccessManager())
self.web_page.networkAccessManager().setCookieJar(QNetworkCookieJar())
self.resize(QSize(1024, 768))

web_view = QWebView()
web_view.resize(QSize(1024, 768))
web_view.settings().setAttribute(QWebSettings.AutoLoadImages, True)
web_view.settings().setAttribute(QWebSettings.JavascriptEnabled, True)
web_view.settings().setAttribute(QWebSettings.JavaEnabled, False)
web_view.settings().setAttribute(QWebSettings.JavascriptCanOpenWindows, False)
web_view.settings().setAttribute(QWebSettings.PluginsEnabled, True)

self.web_page.setView(web_view)
self.setCentralWidget(web_view)
self.setWindowTitle('MaybeVideo')



self.web_page.view().urlChanged.connect(self._page_url_change)
self.web_page.loadStarted.connect(self._page_start)
self.web_page.loadProgress.connect(self._page_progress)
self.web_page.loadFinished.connect(self._page_finished)

def go(self, url):
#print 'go:', url
self.web_page.view().load(QUrl(url))

def _page_progress(self, percent):
#print 'page progress', percent
pass

def _page_start(self):
#print 'page start'
pass

def _page_finished(self, ok):
#print 'page finished:', str(ok)
pass

def _page_url_change(self, url):
print '_url_change:', str(url.toString())

mvw = MaybeVideoWindow()

def end(ign, ign2):
print 'stopping'
reactor.stop()

def start(): 
mvw.show()
if len(sys.argv)  1:
mvw.go('http://' + sys.argv[1] )
else: