Вопрос по ruby – Highgui и рубин

6

Мне нужно написать один простой проект, и я использую opencv, ruby и mac. Я установил opencv через brew и rb_webcam через gem install.

# -*- coding: utf-8 -*-

require "opencv"
require "rb_webcam"

capture = Webcam.new

Этот код выкидывает

$ 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>'

Я не могу понять, как я могу указать, где находится highgui.

UPD: Решил, загрузив камень отсюдаhttps://github.com/TyounanMOTI/rb_webcam и сборка и установка вручную.

Сборка из источника работала на меня. Sauce McBoss

Ваш Ответ

4   ответа
4

какую обертку вы используете, но вы должны взглянуть на это:Ruby / OpenCV - оболочка OpenCV Ruby.

Образец обнаружения лица:

#!/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

Классификатор можно скачатьВот.

EDIT:

The following code uses OpenCV, the rb_webcam gem, and RMagick to capture an image from a webcam 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' 
Вы пытались добавитьinclude OpenCV к вашему коду?
Обновленный ответ. Такжеtest_cvcapture.rb представляет хороший пример того, как захватить из файла.
Спасибо, Карл. Я использую эту обертку:github.com/ser1zw/ruby-opencv, Работает нормально с распознаванием лиц. Но также мне нужно, чтобы highgui работал, чтобы моя веб-камера работала. В этом проблема. evilgeniuz
Спасибо за помощь! Решил, загрузив камень отсюдаgithub.com/TyounanMOTI/rb_webcam и сборка и установка вручную. evilgeniuz
2

уже слишком поздно, но я тоже изо всех сил пытался заставить мою веб-камеру работать пока в безнадёжном гневе я случайно попробовал

#!/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

Надеюсь, это поможет, потому что я отказался отrb_webcam после недели беда

Большое спасибо, идти с OpenCV было намного проще, чем сrb_webcam
0

<!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 - :-) забыл его pw

1

ruby-opencv перл:

require "opencv"

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

(Установка OpenCV на macOS:brew install homebrew/science/opencv --HEAD)

Похожие вопросы