Tall and ruby

I need to write one simple project and I use opencv, ruby ​​and mac. I installed opencv via brew and rb_webcam via gem installation.

# -*- coding: utf-8 -*- require "opencv" require "rb_webcam" capture = Webcam.new 

This code throws

 $ ruby tracking.rb /Users/evilgeniuz/.rvm/gems/ruby-1.9.3-p125/gems/nice-ffi-0.4/lib/nice-ffi/library.rb:98:in `load_library': Could not load highgui. (LoadError) from /Users/evilgeniuz/.rvm/gems/ruby-1.9.3-p125/gems/rb_webcam-0.3.0/lib/rb_webcam.rb:7:in `<module:Highgui>' from /Users/evilgeniuz/.rvm/gems/ruby-1.9.3-p125/gems/rb_webcam-0.3.0/lib/rb_webcam.rb:4:in `<top (required)>' from /Users/evilgeniuz/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/rubygems/custom_require.rb:59:in `require' from /Users/evilgeniuz/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/rubygems/custom_require.rb:59:in `rescue in require' from /Users/evilgeniuz/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/rubygems/custom_require.rb:35:in `require' from tracking.rb:4:in `<main>' 

I cannot figure out how I can indicate where highgui is located.

UPD: Solved it by downloading the gem from here https://github.com/TyounanMOTI/rb_webcam and creating and installing it manually.

+6
source share
5 answers

Not sure which shell you're using, but you should take a look at this: Ruby / OpenCV is a Ruby OpenCV shell .

Face Detection Sample:

 #!/usr/bin/env ruby require 'opencv' include OpenCV # Load an image img = IplImage.load('sample.jpg') # Load the cascade for detecting faces detector = CvHaarClassifierCascade::load('haarcascade_frontalface_alt.xml.gz') # Detect faces and draw rectangles around them detector.detect_objects(img) do |rect| img.rectangle!(rect.top_left, rect.bottom_right, color: CvColor::Red) end # Create a window and show the image window = GUI::Window.new('Face Detection') window.show(img) GUI::wait_key 

The classifier can be downloaded here .

EDIT

The following code uses OpenCV, rb_webcam gem, and RMagick to capture a webcam image and save it as a jpg file:

 require 'rb_webcam' require 'RMagick' capture = Webcam.new image = capture.grab width = image.size[:width] rows = image.data.unpack("C*").each_slice(3).to_a.each_slice(width).to_a capture.close height = rows.length img = Magick::Image.new width, height rows.each_with_index do |r, i| q = r.map {|b, g, r| Magick::Pixel.new r * 256, g * 256, b * 256, 0} img.store_pixels(0, i, width, 1, q) end img.format = 'jpg' img.write 'webcam.jpg' 
+4
source

Maybe it is too late, but I also struggle to keep my webcam working while in hopeless rage, I accidentally tried:

 #!/usr/bin/env ruby require "rubygems" gem "ruby-opencv" require "opencv" window = OpenCV::GUI::Window.new("webcam") capture = OpenCV::CvCapture.open while true key = OpenCV::GUI::wait_key(1) image = capture.query window.show image next unless key case key.chr when "\e" exit end end 

Hope this helps, because I gave up rb_webcam after more than one week of trouble.

+2
source

With ruby-opencv stone:

 require "opencv" capture = OpenCV::CvCapture.open sleep 1 # Warming up the webcam capture.query.save("image.jpg") capture.close 

(Installing OpenCV on macOS: brew install homebrew/science/opencv --HEAD )

+1
source

best cross platform out of the box

 <!doctype html> <html lang="de"> <head> <style type="text/css"> form > input { margin-right: 15px; } #results { float:center; margin:5px; padding:5px; border:1px solid; background:#ccc; } </style> </head> <table class="reference notranslate"> <tr> <th>Webcam</th> <th>Your captured image will appear here..</th> </tr> </tr> <td> <video autoplay id="vid" width="320" height="240" style="border:1px solid #d3d3d3;"></video></br> <button onclick="snapshot()">Take Picture</button> </td> <td> <div id="results">Your captured image will appear here...< <canvas id="canvas" width="320" height="240"></canvas> </div> <br> <button onclick="upload()">upload</button> </td> </tr> </table> <script type="text/javascript"> var video = document.querySelector("#vid"); var canvas = document.querySelector('#canvas'); var ctx = canvas.getContext('2d'); ctx.scale(0.5,0.5); var localMediaStream = null; var onCameraFail = function (e) { console.log('Camera did not work.', e); } function snapshot() { if (localMediaStream) { ctx.drawImage(video, 0, 0); } } navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia; window.URL = window.URL || window.webkitURL; navigator.getUserMedia({video:true}, function (stream) { video.src = window.URL.createObjectURL(stream); localMediaStream = stream; }, onCameraFail); redirectTime = "1500"; function timedRedirect() { setTimeout("history.back();",redirectTime); }; function upload() { var oCanvas = document.getElementById("canvas"); Canvas2Image.saveAsPNG(oCanvas); // will prompt the user to save the image as PNG var oImgPNG = Canvas2Image.saveAsPNG(oCanvas, true); JavaScript:timedRedirect() }; </script> 

-cartasu - :-) forgive him pw

0
source

At least on Windows, we can specify the version number in load_library, as shown on the rb_webcam.rb 7 page:

 load_library("opencv_highgui2413") 
0
source

Source: https://habr.com/ru/post/913565/


All Articles