{"id":671,"date":"2019-10-10T11:24:28","date_gmt":"2019-10-10T10:24:28","guid":{"rendered":"http:\/\/www.igfasouza.com\/blog\/?p=671"},"modified":"2021-05-20T14:25:20","modified_gmt":"2021-05-20T13:25:20","slug":"ogb-appreciation-day-face-recognition-in-an-easy-way","status":"publish","type":"post","link":"http:\/\/www.igfasouza.com\/blog\/ogb-appreciation-day-face-recognition-in-an-easy-way\/","title":{"rendered":"OGB Appreciation Day &#8211; Face Recognition in an easy way"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2019\/10\/1-fpDngO6lM5pDeIPOOezK1g-1024x682.jpeg\" alt=\"\" width=\"625\" height=\"416\" class=\"alignnone size-large wp-image-676\" srcset=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2019\/10\/1-fpDngO6lM5pDeIPOOezK1g-1024x682.jpeg 1024w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2019\/10\/1-fpDngO6lM5pDeIPOOezK1g-300x200.jpeg 300w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2019\/10\/1-fpDngO6lM5pDeIPOOezK1g-768x512.jpeg 768w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2019\/10\/1-fpDngO6lM5pDeIPOOezK1g-624x416.jpeg 624w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2019\/10\/1-fpDngO6lM5pDeIPOOezK1g.jpeg 1600w\" sizes=\"auto, (max-width: 625px) 100vw, 625px\" \/><\/p>\n<p><b>How\u2019s it going horse?<\/b><\/p>\n<h2>It&#8217;s Oracle Groundbreaker&#8217;s Appreciation Day!<\/h2>\n<p>Today it&#8217;s #ThanksOGB day and I decided to join the idea with a post about Face Recognition in an easy way using Oracle OCI Marketplace Nvidia image.<\/p>\n<p><b>What is OGB Appreciation day?<\/b><br \/>\n<a href=\"https:\/\/oracle-base.com\/blog\/2019\/09\/30\/ogb-appreciation-day-2019-thanksogb\/\" rel=\"noopener\" target=\"_blank\">OGB Appreciation day<\/a><\/p>\n<p>Don\u2019t forget to search for tweets with #ThanksOGB.<\/p>\n<p>Oracle blog post my <a href=\"https:\/\/blogs.oracle.com\/datascience\/how-to-build-a-face-recognition-application-with-4-lines-of-code\" rel=\"noopener\" target=\"_blank\">article<\/a> about Face Recognition in 4 lines of code.<\/p>\n<p>Today I want to show how you can create an Oracle OCI instance using the Marketplace and configure the environment to run this example easily with the Nvidia image.<\/p>\n<p><a href=\"https:\/\/cloudmarketplace.oracle.com\/marketplace\/oci\" rel=\"noopener\" target=\"_blank\">Oracle OCI Marketplace<\/a><\/p>\n<p>You can follow this <a href=\"https:\/\/blogs.oracle.com\/solaris\/oracle-solaris-now-available-in-the-oci-marketplace\" rel=\"noopener\" target=\"_blank\">link<\/a> on how to create an image using the marketplace. Just change to use Nvidia image!<\/p>\n<p>Once you have the instance running just ssh the image and run:<\/p>\n<div class=\"codecolorer-container bash blackboard\" style=\"overflow:auto;white-space:nowrap;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/><\/div><\/td><td><div class=\"bash codecolorer\"><span class=\"kw2\">sudo<\/span> apt <span class=\"kw2\">install<\/span> python3-pip<br \/>\n<span class=\"kw2\">sudo<\/span> <span class=\"kw2\">apt-get install<\/span> python3-setuptools<br \/>\n<span class=\"kw2\">wget<\/span> http:<span class=\"sy0\">\/\/<\/span>dlib.net<span class=\"sy0\">\/<\/span>files<span class=\"sy0\">\/<\/span>dlib-<span class=\"nu0\">19.17<\/span>.tar.bz2<br \/>\n<span class=\"kw2\">tar<\/span> jxvf dlib-<span class=\"nu0\">19.17<\/span>.tar.bz2<br \/>\n<span class=\"kw3\">cd<\/span> dlib-<span class=\"nu0\">19.17<\/span><br \/>\n<span class=\"kw2\">sudo<\/span> python3 setup.py <span class=\"kw2\">install<\/span><br \/>\n<span class=\"kw2\">sudo<\/span> pip3 <span class=\"kw2\">install<\/span> face_recognition<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>Now you are ready to play with Face Recognition.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2019\/10\/face_recognition01.jpg\" alt=\"\" width=\"615\" height=\"462\" class=\"alignnone size-full wp-image-677\" srcset=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2019\/10\/face_recognition01.jpg 615w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2019\/10\/face_recognition01-300x225.jpg 300w\" sizes=\"auto, (max-width: 615px) 100vw, 615px\" \/><\/p>\n<p>You can use my Python code to Streaming your Raspberry Pi camera feeds.<\/p>\n<div class=\"codecolorer-container python blackboard\" style=\"overflow:auto;white-space:nowrap;height:300px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>29<br \/>30<br \/>31<br \/>32<br \/>33<br \/>34<br \/>35<br \/>36<br \/>37<br \/>38<br \/>39<br \/>40<br \/>41<br \/>42<br \/>43<br \/>44<br \/>45<br \/>46<br \/>47<br \/>48<br \/>49<br \/>50<br \/>51<br \/>52<br \/>53<br \/>54<br \/>55<br \/>56<br \/>57<br \/>58<br \/>59<br \/>60<br \/>61<br \/>62<br \/>63<br \/>64<br \/>65<br \/>66<br \/>67<br \/>68<br \/>69<br \/>70<br \/>71<br \/>72<br \/>73<br \/>74<br \/>75<br \/>76<br \/>77<br \/>78<br \/>79<br \/>80<br \/>81<br \/>82<br \/>83<br \/>84<br \/>85<br \/>86<br \/>87<br \/>88<br \/>89<br \/>90<br \/><\/div><\/td><td><div class=\"python codecolorer\"><span class=\"kw1\">import<\/span> io<br \/>\n<span class=\"kw1\">import<\/span> picamera<br \/>\n<span class=\"kw1\">import<\/span> <span class=\"kw3\">logging<\/span><br \/>\n<span class=\"kw1\">import<\/span> socketserver<br \/>\n<span class=\"kw1\">from<\/span> <span class=\"kw3\">threading<\/span> <span class=\"kw1\">import<\/span> Condition<br \/>\n<span class=\"kw1\">from<\/span> http <span class=\"kw1\">import<\/span> server<br \/>\n<br \/>\nPAGE<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;&quot;&quot;<span class=\"es0\">\\<\/span><br \/>\n&lt;html&gt;<br \/>\n&lt;head&gt;<br \/>\n&lt;title&gt;Raspberry Pi - Surveillance Camera&lt;\/title&gt;<br \/>\n&lt;\/head&gt;<br \/>\n&lt;body&gt;<br \/>\n&lt;center&gt;&lt;h1&gt;Raspberry Pi - Surveillance Camera&lt;\/h1&gt;&lt;\/center&gt;<br \/>\n&lt;center&gt;&lt;img src=&quot;stream.mjpg&quot; width=&quot;640&quot; height=&quot;480&quot;&gt;&lt;\/center&gt;<br \/>\n&lt;\/body&gt;<br \/>\n&lt;\/html&gt;<br \/>\n&quot;&quot;&quot;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">class<\/span> StreamingOutput<span class=\"br0\">&#40;<\/span><span class=\"kw2\">object<\/span><span class=\"br0\">&#41;<\/span>:<br \/>\n&nbsp; &nbsp; <span class=\"kw1\">def<\/span> <span class=\"kw4\">__init__<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw2\">self<\/span><span class=\"br0\">&#41;<\/span>:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">self<\/span>.<span class=\"me1\">frame<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw2\">None<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">self<\/span>.<span class=\"me1\">buffer<\/span> <span class=\"sy0\">=<\/span> io.<span class=\"me1\">BytesIO<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">self<\/span>.<span class=\"me1\">condition<\/span> <span class=\"sy0\">=<\/span> Condition<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"kw1\">def<\/span> write<span class=\"br0\">&#40;<\/span><span class=\"kw2\">self<\/span><span class=\"sy0\">,<\/span> buf<span class=\"br0\">&#41;<\/span>:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> buf.<span class=\"me1\">startswith<\/span><span class=\"br0\">&#40;<\/span>b<span class=\"st0\">'<span class=\"es0\">\\x<\/span>ff<span class=\"es0\">\\x<\/span>d8'<\/span><span class=\"br0\">&#41;<\/span>:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\"># New frame, copy the existing buffer's content and notify all<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\"># clients it's available<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">self<\/span>.<span class=\"me1\">buffer<\/span>.<span class=\"me1\">truncate<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">with<\/span> <span class=\"kw2\">self<\/span>.<span class=\"me1\">condition<\/span>:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">self<\/span>.<span class=\"me1\">frame<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw2\">self<\/span>.<span class=\"me1\">buffer<\/span>.<span class=\"me1\">getvalue<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">self<\/span>.<span class=\"me1\">condition<\/span>.<span class=\"me1\">notify_all<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">self<\/span>.<span class=\"me1\">buffer<\/span>.<span class=\"me1\">seek<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> <span class=\"kw2\">self<\/span>.<span class=\"me1\">buffer<\/span>.<span class=\"me1\">write<\/span><span class=\"br0\">&#40;<\/span>buf<span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">class<\/span> StreamingHandler<span class=\"br0\">&#40;<\/span>server.<span class=\"me1\">BaseHTTPRequestHandler<\/span><span class=\"br0\">&#41;<\/span>:<br \/>\n&nbsp; &nbsp; <span class=\"kw1\">def<\/span> do_GET<span class=\"br0\">&#40;<\/span><span class=\"kw2\">self<\/span><span class=\"br0\">&#41;<\/span>:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"kw2\">self<\/span>.<span class=\"me1\">path<\/span> <span class=\"sy0\">==<\/span> <span class=\"st0\">'\/'<\/span>:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">self<\/span>.<span class=\"me1\">send_response<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">301<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">self<\/span>.<span class=\"me1\">send_header<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">'Location'<\/span><span class=\"sy0\">,<\/span> <span class=\"st0\">'\/index.html'<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">self<\/span>.<span class=\"me1\">end_headers<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">elif<\/span> <span class=\"kw2\">self<\/span>.<span class=\"me1\">path<\/span> <span class=\"sy0\">==<\/span> <span class=\"st0\">'\/index.html'<\/span>:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; content <span class=\"sy0\">=<\/span> PAGE.<span class=\"me1\">encode<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">'utf-8'<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">self<\/span>.<span class=\"me1\">send_response<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">200<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">self<\/span>.<span class=\"me1\">send_header<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">'Content-Type'<\/span><span class=\"sy0\">,<\/span> <span class=\"st0\">'text\/html'<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">self<\/span>.<span class=\"me1\">send_header<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">'Content-Length'<\/span><span class=\"sy0\">,<\/span> <span class=\"kw2\">len<\/span><span class=\"br0\">&#40;<\/span>content<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">self<\/span>.<span class=\"me1\">end_headers<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">self<\/span>.<span class=\"me1\">wfile<\/span>.<span class=\"me1\">write<\/span><span class=\"br0\">&#40;<\/span>content<span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">elif<\/span> <span class=\"kw2\">self<\/span>.<span class=\"me1\">path<\/span> <span class=\"sy0\">==<\/span> <span class=\"st0\">'\/stream.mjpg'<\/span>:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">self<\/span>.<span class=\"me1\">send_response<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">200<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">self<\/span>.<span class=\"me1\">send_header<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">'Age'<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">self<\/span>.<span class=\"me1\">send_header<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">'Cache-Control'<\/span><span class=\"sy0\">,<\/span> <span class=\"st0\">'no-cache, private'<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">self<\/span>.<span class=\"me1\">send_header<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">'Pragma'<\/span><span class=\"sy0\">,<\/span> <span class=\"st0\">'no-cache'<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">self<\/span>.<span class=\"me1\">send_header<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">'Content-Type'<\/span><span class=\"sy0\">,<\/span> <span class=\"st0\">'multipart\/x-mixed-replace; boundary=FRAME'<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">self<\/span>.<span class=\"me1\">end_headers<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">try<\/span>:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">while<\/span> <span class=\"kw2\">True<\/span>:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">with<\/span> output.<span class=\"me1\">condition<\/span>:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; output.<span class=\"me1\">condition<\/span>.<span class=\"me1\">wait<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; frame <span class=\"sy0\">=<\/span> output.<span class=\"me1\">frame<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">self<\/span>.<span class=\"me1\">wfile<\/span>.<span class=\"me1\">write<\/span><span class=\"br0\">&#40;<\/span>b<span class=\"st0\">'--FRAME<span class=\"es0\">\\r<\/span><span class=\"es0\">\\n<\/span>'<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">self<\/span>.<span class=\"me1\">send_header<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">'Content-Type'<\/span><span class=\"sy0\">,<\/span> <span class=\"st0\">'image\/jpeg'<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">self<\/span>.<span class=\"me1\">send_header<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">'Content-Length'<\/span><span class=\"sy0\">,<\/span> <span class=\"kw2\">len<\/span><span class=\"br0\">&#40;<\/span>frame<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">self<\/span>.<span class=\"me1\">end_headers<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">self<\/span>.<span class=\"me1\">wfile<\/span>.<span class=\"me1\">write<\/span><span class=\"br0\">&#40;<\/span>frame<span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">self<\/span>.<span class=\"me1\">wfile<\/span>.<span class=\"me1\">write<\/span><span class=\"br0\">&#40;<\/span>b<span class=\"st0\">'<span class=\"es0\">\\r<\/span><span class=\"es0\">\\n<\/span>'<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">except<\/span> <span class=\"kw2\">Exception<\/span> <span class=\"kw1\">as<\/span> e:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw3\">logging<\/span>.<span class=\"me1\">warning<\/span><span class=\"br0\">&#40;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st0\">'Removed streaming client %s: %s'<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">self<\/span>.<span class=\"me1\">client_address<\/span><span class=\"sy0\">,<\/span> <span class=\"kw2\">str<\/span><span class=\"br0\">&#40;<\/span>e<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">else<\/span>:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">self<\/span>.<span class=\"me1\">send_error<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">404<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">self<\/span>.<span class=\"me1\">end_headers<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">class<\/span> StreamingServer<span class=\"br0\">&#40;<\/span>socketserver.<span class=\"me1\">ThreadingMixIn<\/span><span class=\"sy0\">,<\/span> server.<span class=\"me1\">HTTPServer<\/span><span class=\"br0\">&#41;<\/span>:<br \/>\n&nbsp; &nbsp; allow_reuse_address <span class=\"sy0\">=<\/span> <span class=\"kw2\">True<\/span><br \/>\n&nbsp; &nbsp; daemon_threads <span class=\"sy0\">=<\/span> <span class=\"kw2\">True<\/span><br \/>\n<br \/>\n<span class=\"kw1\">with<\/span> picamera.<span class=\"me1\">PiCamera<\/span><span class=\"br0\">&#40;<\/span>resolution<span class=\"sy0\">=<\/span><span class=\"st0\">'640x480'<\/span><span class=\"sy0\">,<\/span> framerate<span class=\"sy0\">=<\/span><span class=\"nu0\">24<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">as<\/span> camera:<br \/>\n&nbsp; &nbsp; output <span class=\"sy0\">=<\/span> StreamingOutput<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">#Uncomment the next line to change your Pi's Camera rotation (in degrees)<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">#camera.rotation = 90<\/span><br \/>\n&nbsp; &nbsp; camera.<span class=\"me1\">start_recording<\/span><span class=\"br0\">&#40;<\/span>output<span class=\"sy0\">,<\/span> format<span class=\"sy0\">=<\/span><span class=\"st0\">'mjpeg'<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">try<\/span>:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; address <span class=\"sy0\">=<\/span> <span class=\"br0\">&#40;<\/span><span class=\"st0\">''<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">8000<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; server <span class=\"sy0\">=<\/span> StreamingServer<span class=\"br0\">&#40;<\/span>address<span class=\"sy0\">,<\/span> StreamingHandler<span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; server.<span class=\"me1\">serve_forever<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">finally<\/span>:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; camera.<span class=\"me1\">stop_recording<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>Just change the code for instead of 0 use the streaming url, in the example here: http:\/\/ipaddress:8000\/stream<\/p>\n<div class=\"codecolorer-container bash blackboard\" style=\"overflow:auto;white-space:nowrap;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"bash codecolorer\">video_capture = cv2.VideoCapture<span class=\"br0\">&#40;<\/span><span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>Happy face recognition.<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2019\/10\/giphy.gif\" alt=\"\" width=\"480\" height=\"360\" class=\"alignnone size-full wp-image-678\" \/><\/p>\n<h2>Link<\/h2>\n<p><a href=\"https:\/\/www.pyimagesearch.com\/start-here\" rel=\"noopener\" target=\"_blank\">pyimagesearch<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>How\u2019s it going horse? It&#8217;s Oracle Groundbreaker&#8217;s Appreciation Day! Today it&#8217;s #ThanksOGB day and I decided to join the idea with a post about Face Recognition in an easy way using Oracle OCI Marketplace Nvidia image. What is OGB Appreciation&hellip; <a href=\"http:\/\/www.igfasouza.com\/blog\/ogb-appreciation-day-face-recognition-in-an-easy-way\/\" class=\"more-link\">Continue Reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":676,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[30],"tags":[18],"class_list":["post-671","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-python","tag-python"],"_links":{"self":[{"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/posts\/671","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/comments?post=671"}],"version-history":[{"count":10,"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/posts\/671\/revisions"}],"predecessor-version":[{"id":1252,"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/posts\/671\/revisions\/1252"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/media\/676"}],"wp:attachment":[{"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/media?parent=671"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/categories?post=671"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/tags?post=671"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}