61180


Herokuでフラスコアプリケーションをデプロイしようとしているのですが、  
動作時にエラーが発生してしまいます。  
アプリは、画像をOpenCVによって分析するものですが、その際にエラーが発生します。

heroku logでエラーを確認すると

[code]

    recognizer = cv2.face.LBPHFaceRecognizer_create()
    AttributeError: module 'cv2.cv2' has no attribute 'face'
    
[/code]

と表示されています。  
ローカル環境では、問題なく動作するので、  
openCVをHerokuに正しく導入できていないと思ったので、以下のコードをheroku.ymlに追加しpushしました。

[code]

    build:
      languages:
        - python
      packages:
        - libopencv-dev
    run:
      web: gunicorn server:app --log-file -
    
[/code]

これでも、同じエラーが発生してしまいます...  
opencv_contrib_pythonやopencv-pythonを再インストールしても状況は変わりません。  
今の所、Herokuでopencv_contrib_pythonをインポートする必要があると考えているのですが  
どのようにすべきかわかりません。

ご教示いただけますと幸いです。

以下、こちらが実際のコードになります。  
何卒よろしくお願いいたします。

[code]

    def load_model():
        global recognizer
        print(" * Loading pre-trained model ...")
        cascadePath = './haarcascade_frontalface_alt.xml'
        faceCascade = cv2.CascadeClassifier(cascadePath)
        recognizer = cv2.face.LBPHFaceRecognizer_create()
    
[/code]


CC BY-SA 4.0
2019-12-05T10:58:10.507
61146
2019-12-06T15:11:47.753
2019-12-06T01:14:12.063
36940
36940
question
python opencv heroku flask
Heroku上でのエラー"AttributeError: module 'cv2.cv2' has no attribute 'face'"


Herokuで当てはまるかどうか分かりませんが、以下のいくつかの記事を見ると、

`opencv-python`と`opencv-contrib-python`の両方をインストールしてはいけない。  
どちらか片方のみをインストールすること、そして`face`を使うなら`opencv-contrib-python`らしいです。

ただし未承認ですが、逆に両方インストールで解決したという回答もあります。

[AttributeError: module 'cv2.cv2' has no attribute 'faces' in
OpenCV](https://stackoverflow.com/q/55581161/9014308)  
承認マーク付き回答

> Try update OpenCV with
[code]

>     pip install opencv-contrib-python
>  
[/code]

それに付いたコメント

> It worked in my case. Do you know how are these modules: opencv-contrib-
> python and openCV different?
>
> 私の場合はうまくいきました。これらのモジュール：opencv-contrib-pythonとopenCVがどのように異なるか知っていますか？
>
> I believe`opencv-contrib-python`is the unofficial pre-built OpenCV package.
> It's not the official OpenCV package released by OpenCV.org. There is
> also`opencv-python`which contains just the main modules of the OpenCV
> library while`opencv-contrib-python`contains both the main modules along
> with the contrib modules. You don't want to install both, pick only one.
>
> opencv-contrib-pythonは、非公式のビルド済みOpenCVパッケージだと思います。  
>  OpenCV.orgによってリリースされた公式のOpenCVパッケージではありません。  
>  また、OpenCVライブラリのメインモジュールのみを含むopencv-pythonがあり、opencv-contrib-
> pythonにはcontribモジュールとともにメインモジュールの両方が含まれます。  
>  両方をインストールするのではなく、1つだけを選択します。

本家で同様のものが解決済みらしいです。  
[module 'cv2.cv2' has no attribute 'face' #13848 -
opencv/opencv](https://github.com/opencv/opencv/issues/13848)

他に承認マークは無いですが、類似の回答もあります。  
[module 'cv2.cv2' has no attribute
'face'](https://stackoverflow.com/q/54158806/9014308)

> The`face`module isn't actually a part of the`opencv`library proper. Rather,
> [face is
> part](https://github.com/opencv/opencv_contrib/tree/master/modules/face) of
> the`opencv-contrib`library. From the readme:
>

>> This repository [`opencv-contrib`] is intended for development of so-called
"extra" modules, contributed functionality. New modules quite often do not
have stable API, and they are not well-tested. Thus, they shouldn't be
released as a part of official OpenCV distribution, since the library
maintains binary compatibility, and tries to provide decent performance and
stability.

>
> `opencv-contrib`needs to be installed separately. As @james pointed out (in
> a now deleted comment), the current easy way to get the Python version is to
> just do:
[code]

>     pip install opencv-contrib-python
>  
[/code]

>
> After you run the above`pip`call, your code should work.

逆にこちらは未承認ですが両方インストールして動作したらしいです。  
[AttributeError: module 'cv2' has no attribute
'face'](https://stackoverflow.com/q/51274439/9014308)

> Finally, I got it working. I just used pip for both installations:
[code]

>     pip install opencv-python
>     pip install opencv-contrib-python
>  
[/code]

類似で未承認。  
[AttributeError: module 'cv2.cv2' has no attribute
'createLBPHFaceRecognizer'](https://stackoverflow.com/q/44633378/9014308)  
[attributeerror: module 'cv2.face' has no attribute
'createlbphfacerecognizer'](https://stackoverflow.com/q/45655699/9014308)


CC BY-SA 4.0
2019-12-06T15:11:47.753
61180
2019-12-06T15:11:47.753
26370
61146
answer