質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.90%

zBarをrubyから呼び出しjpgを読み込む

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,993

score 44

やりたいこと

railsからzBarを呼び出し、バーコード写真からJANコードを取得したい。

できたこと(別途質問し、自己解決した部分)

http://qiita.com/kusuwada/items/9ba1ea4ccb64d1e18b79
を参考にzBarライブラリをmacにインストールし、ターミナルから呼び出し、JANコードを取得することができました。

ターミナル画面

$zbarimg 466-tm.jpg
EAN-13:1920222007009
EAN-13:9784087204254
scanned 2 barcode symbols from 1 images in 0.01 seconds
(なお、使用したjpgは以下にあるものです)
http://www.moongift.jp/2010/03/ruby-barcodescanner/

試した(が出来ない)こと

 1.ruby barcode scannerを使用

http://www.moongift.jp/2010/03/ruby-barcodescanner/
で紹介されているものをインストール試みましたが、rake installのところで、以下ようなエラーで、恐らく古いコードでもう対応していないものと思い、とりあえず諦めてます。

ruby-barcodescanner $rake install --trace
rake aborted!
ERROR: 'rake/gempackagetask' is obsolete and no longer supported. Use 'rubygems/package_task' instead.
/.rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/gempackagetask.rb:3:in <top (required)>' /.rbenv/versions/2.2.2/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in require'
/.rbenv/versions/2.2.2/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in require' /Desktop/ruby-barcodescanner/Rakefile:6:in <top (required)>'
/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/rake_module.rb:28:in load' /.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/rake_module.rb:28:in load_rakefile'
/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/application.rb:686:in raw_load_rakefile' /.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/application.rb:96:in block in load_rakefile'
/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/application.rb:178:in standard_exception_handling' /.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/application.rb:95:in load_rakefile'
/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/application.rb:79:in block in run' /.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/application.rb:178:in standard_exception_handling'
/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/application.rb:77:in run' /.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/rake-11.2.2/exe/rake:27:in <top (required)>'
/.rbenv/versions/2.2.2/bin/rake:23:in load' /.rbenv/versions/2.2.2/bin/rake:23:in <main>'

 2. zBar gemを使用し、rubyから実行

https://github.com/willglynn/ruby-zbar
いくつかgoogleしてみるとこれはエラーを内包している(https://github.com/willglynn/ruby-zbar/issues/5)とのことですが、もしかしたら私の環境では大丈夫もしくはエラーは修正されているのかもと思いやってみました。

以下のようなコードのzbar_test.rbをjpgファイルのあるフォルダに置き、ターミナルから実行しました。
require 'zbar'
jpeg = File.binread('466-tm.jpg')
z = ZBar::Image.from_jpeg(jpeg)
r = z.process

puts "z is =#{z}"
puts "r is =#{r}"

結果は以下のとおりです。
$ruby zbar_test.rb 
z is =#<ZBar::Image:0x007fa4ab9b9e50>
r is =[#<ZBar::Symbol:0x007fa4ab9b9b58 @symbology="EAN-13", @data="1920222007009", @addon="", @quality=42, @location=[[31, 201], [138, 203], [31, 203], [138, 205], [145, 206], [138, 209], [145, 210], [138, 213], [30, 213], [138, 219], [138, 223], [144, 224], [138, 227], [144, 228], [138, 231], [137, 237], [138, 239], [144, 240], [138, 241], [138, 243], [144, 246], [137, 247], [29, 247], [137, 249], [144, 250], [29, 251], [137, 253], [137, 255], [29, 255], [137, 257], [28, 257], [137, 259], [137, 261], [137, 263], [137, 265], [137, 267], [29, 267], [137, 269], [258, 270], [137, 271], [257, 272], [137, 273]]>, #<ZBar::Symbol:0x007fa4ab9b9248 @symbology="EAN-13", @data="9784087204254", @addon="", @quality=22, @location=[[38, 51], [142, 57], [37, 57], [37, 59], [141, 61], [37, 61], [141, 63], [142, 67], [36, 73], [37, 75], [36, 83], [141, 87], [147, 88], [141, 89], [36, 95], [141, 97], [140, 99], [140, 101], [35, 101], [140, 103], [35, 111], [140, 115]]>]

 3. zBar gemを使用し、railsから実行

コントローラーで以下のような記載とし、require 'zbar'でzbarライブラリを読み込もうとしました

---以下コントローラーのコード---
require 'zbar'
def new
@product = Product.new
z = Zbar::Image.from_jpeg(File.read('466-tm.jpg')).process
end

---以下Gemfileのコード---
gem 'zbar'

ところが、以下のとおり、requireが失敗してしまいました。
LoadError in ProductsController#index
cannot load such file -- zbar

これから試そうと思っていること

rubyからターミナルコマンドを直接呼び出してJANコードを得る

system()等を使って恐らくできるとは思いますが、Heroku等にアップロードした際にエラーになりそうな気がしており、あまり気が進みません。。

他のバーコード写真でも試してみる。

バーコード1つのみのものとか。ただ、望み薄な気はしてます。。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

完全に勘違いしておりました。。
まず2.のzBarのgemは正しくアウトプットされてるようですし、3.はZbarではなくZBarとしなければならないものでした。(逆に言えばその修正で動きますので、他の方のご参考になればと。。。)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.90%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る