Finally some what of a break through, Using OpenCv for just capturing a web cam seems wasteful and it doesn't work well with the software decoding and re encoding jpegs from a mjpeg stream. Also all the steps to set up pwm pins a / uart pins on the beaglebone that Ive take to date seem to start other problems.
For web cam capture via a USB camera I found a v4l2 library that makes it fast and simple. Install the v4l2capture library, it takes a few iterations to get all the dependencies installed. see the camera script and web server example pasted below. for pin control i've been leaving the uEnv.txt file alone and using the univeral(x) cape manager and config-pin (ex config-pin -a P9.24 uart) to set pin function. there are still quirks and you have to reset pins on reboot, but its been manageable. for instance if you load the cape manger overlay directly it doesnt always work, but if it loads itself after finding its not loaded when executing config-pin - a Px.xx nnnn it works fine, also if you run config-pin -a to set a pin to uart it auto loads cape-universal which doesnt let some pwm pins work, so its best to get universala loaded first as one does not replace the other and I'm not sure they can be unloaded with out cycling power. https://github.com/cdsteinkuehler/beaglebone-universal-io #camera.py import select import v4l2capture import time class VideoCamera(object): #globals for testing size_x=0 size_y=0 # intitialize def __init__(self): # grab camera self.video = v4l2capture.Video_device("/dev/video0") #set format the python version of v4l2 and v4l2capture API's are not the great size_x, size_y = self.video.set_format(640, 480, fourcc='MJPG') print ('size :',size_x,size_y) #create a memory buffer for the jpgs self.video.create_buffers(1) self.video.queue_all_buffers() # start the vidoe capture process self.video.start() # destructor def __del__(self): self.video.close() # capture image def get_frame(self): #before = time.clock() #not sure what select.select is doing select.select((self.video,), (), ()) # read and queue set the motion so to speak, with read alone you only get the first image on start jpeg = self.video.read_and_queue() #print 1/(time.clock()-before) return jpeg #!/usr/bin/env python # main.py # Project: Video Streaming with Flask # Author: Log0 <im [dot] ckieric [at] gmail [dot] com> # Date: 2014/12/21 # Website: http://www.chioka.in/ # Description: # Modified to support streaming out with webcams, and not just raw JPEGs. # Most of the code credits to Miguel Grinberg, except that I made a small tweak. Thanks! # Credits: http://blog.miguelgrinberg.com/post/video-streaming-with-flask # Usage: # 1. Install Python dependencies: cv2, flask. (wish that pip install works like a charm) # 2. Run "python main.py". # 3. Navigate the browser to the local webpage (ex 192.168.8.100:5000). from flask import Flask, render_template, Response from camera import VideoCamera import time app = Flask(__name__) @app.route('/') def index(): return render_template('index.html') def gen(camera): # the timestart variable is an attempt to limit calls to get a camera frame 1/.0333 (30) times per second to match the camera limit timestart =time.clock()+.033333 while True: if time.clock() > timestart: timestart=time.clock()+.033333 frame = camera.get_frame() yield (b'--frame\r\n'b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n\r\n') @app.route('/video_feed') def video_feed(): return Response(gen(VideoCamera()), mimetype='multipart/x-mixed-replace; boundary=frame') if __name__ == '__main__': app.run(host='0.0.0.0', debug=True) On Sunday, November 13, 2016 at 4:09:06 PM UTC-6, Chris M wrote: > > Some thoughts and findings as I begin to learn the BBG (Beaglebone Green) > -- For more options, visit http://beagleboard.org/discuss --- You received this message because you are subscribed to the Google Groups "BeagleBoard" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/beagleboard/361643c1-ea00-4f71-b1d2-3dc2f6ab1f4e%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
