2012-07-03 11 views
9

これはおそらく、OpenCVを使用したときに私が今までに遭遇したうちで最も異常なエラーの1つです。多くのことが起こっているので、私の能力の中でこれを説明しようとしましょう。Webリクエストから呼び出されたときにOpenCVのimreadがハングアップする

  1. 私はDjango WebフレームワークとOpenCV(cv2)を併用しています。私はDjangoのビューからディスクからファイルを読み込もうとしています。

    基本的には、views.pyファイルと同じパスに「1.jpg」というファイルがあります。これでこのコードはすべて実行しています。簡単に。しかし、次のステップは物事が狂ってしまうところです。

  2. ここで、 'imagePath'にある画像ファイルを読みたいと思います。これは、cv2.imreadへの呼び出しを必要とします。

    image = cv2.imread(imagePath) 
    

    これは私の問題が始まるところです。どういうわけか、Apache(あるいは多分OpenCV、私は言うことができません)がハングし始め、ファイルがロードされることはありません。エラーメッセージはありません。何もありません。

私はOpenCVの古いバージョン(import cv)を試してみることにしました。不思議なことに、私がcv.LoadImage(imagePath)を呼び出すと、Apacheがハングして画像が正しく読み込まれません。なぜ私は絶対に考えていない。

私の問題の潜在的な回避策は、PILを使用することです。 PIL Apacheがハングアップしないと、私は私のイメージがnumpyの配列として表現して、通常のように進行し、それにCV2関数のいずれかを適用することができます使用して再度

from PIL import Image 
import numpy as np 
image = Image.open(imagePath) 
image = np.asarray(image) 

一つ、。

しかし、私は回避策に取り組むのではなく、cv2.imreadがハングしているという事実が本当に気になります。

誰もこれまでに遭遇したことはありますか?

EDIT:Pythonシェルからのcv.imreadを使用すると、うまく動作します。ハングアップが発生するのは、Apacheリクエストからです。

>>> import cv2 
>>> image = cv2.imread("1.jpg") 
>>> image.shape 
(400, 344, 3) 
>>> 
+0

この問題が発生したとき、私はOpenCVの2.4.1を実行していました。そして、2.4.0をコンパイルしてインストールしました。何らかの理由で、imreadはもはやハングしません。非常に奇妙な。 –

+0

私はOpenCV 2.4.2を使って同じ問題を抱えています。 – Tickon

+0

最近、この問題が発生しました。古いOpenCVバージョンの修正はありますか? OpenCV 2.4.6.1を使ってうまく動作しているようです。 – Mailerdaimon

答えて

3

間違っ

imagePath = os.path.dirname(__file__) + "/1.jpg" 

from os.path import abspath, join, dirname 

imagePath = abspath(join(dirname(__file__), "1.jpg")) 
2

私は同様の問題を持っていたし、修正を発見した - >ちょうどあなたのApacheの設定に追加します。

WSGIScriptAlias application-group=%{GLOBAL} 

どうやらあなたが拡張モジュールを持っているときに起こるサブインタープリタで動作するように設計されています。上記のことは、それが主な通訳者の中で動くように強制する。

出典: django apache mod-wsgi hangs on importing a python module from .so file http://blog.rtwilson.com/how-to-fix-flask-wsgi-webapp-hanging-when-importing-a-module-such-as-numpy-or-matplotlib/

+0

ありがとうございます。私の日を救った! – valter

+0

ありがとうございました! – robrant

関連する問題