LoginSignup
0
0

More than 3 years have passed since last update.

CentOS7+Anaconda+Django+ApacheでKerasを動かす

Last updated at Posted at 2020-10-10

Anacondaで作った画像処理プログラムをApache+Djangoで動かしたくなったので簡単な自分用メモ。SSLとかセキュリティ的なことは全くしていません。
https://qiita.com/hinoma/items/5b881b8ac531a0ba7953 の続きになります。
とりあえず文字メインです。画像などはまだ用意してないので、後々準備できたら載せます。

Djangoプロジェクト

前回の記事そのままだとCSSが動きません。そのため,setting.pyを編集します。

setting.py
import os
TEMOLATES = [
  {
     'DIRS' : [os.path.join(BASE_DIR, 'templates')]


LANGUAGE_CODE = 'ja'
TIME_ZONE = 'Asia/Tokyo'

STATIC_ROOT = os.path.join(BASE_DIR, 'static')

そのあと,manage.pyとかと同じ階層に,staticディレクトリ, templatesディレクトリを作成し,
staticディレクトリにはcssファイル, templatesディレクトリにはhtmlファイルを入れます.

/etc/httpd/conf.d/django.conf
# 追記
WSGIApplicationGroup %{GLOBAL}
WSGIPythonHome /usr/local/bin/pyenv/versions/anaconda3-4.4.0/

Alias /static/ /var/www/komon/static/
<Directory /var/www/komon/staitc>
  Require all granted
</Directory>
# python manage.py collectstatic

これを実行しましょう。

機械学習プログラムを実行

opencv, keras, tensorflow など使うことがあるので,これらをインストールしていきます。

# pip install opencv-python==4.4.0.44
# conda install keras=2.2.4
# conda install numpy=1.16.2
# conda install tensorflow=1.13.1

keras=2.2.4をインストールするとnumpy1.18がインストールされますが、これの相性が悪いのでダウングレードは必須です。

libstdc++.so.6 version cxxabi_1.3.8' not found

いざapacheを実行したら起こったエラーがこれ。どうやら、libstdc++.so.6の中にcxxabi_1.3.8なるものがないらしい

# strings /usr/lib64/libstdc++.so.6 | grep CXXABI_
CXXABI_1.3
CXXABI_1.3.1
CXXABI_1.3.2
CXXABI_1.3.3
CXXABI_1.3.4
CXXABI_1.3.5
CXXABI_1.3.6
CXXABI_1.3.7

どうやら1.3.8がないので、これを何とかして取得する必要がある。

# cp /usr/local/bin/pyenv/versions/anaconda3-4.4.0/lib/libstdc++.so.6.0.26 /usr/lib64/
# mv libstdc++.so.6 libstdc++.so.6.bak
# ln -s libstdc++.so.6.0.26 libstdc++.so.6
# string /usr/lib64/libstdc++.so.6 | grep CXXABI_
(CXXABI_1.3.8があればよい)
# systemctl restart httpd

これを実行して問題なければ,djangoプロジェクトのviews.pyなどに


import tensorflow as tf

などと追加した上で、外部のPCからIPを打って画面が表示されたら大丈夫だと思います。

画像認識などで画像に「日本語」を表示したいとき

英数字であれば

cv2.putText(画像パス, 表示させたい文字, (x, y), cv2.FONT_HERSHEY_PLAIN, 2, , 1, cv2.LINE_AA)

などで表示させることはできるが、日本語はopencvでは表示できないためpillowを使う

from PIL import Image, ImageFont, ImageDraw

はプログラムを通るが,日本語を表示させるときはフォントを読み込む必要があるので以下のコードで読み込む。

font = ImageFont.truetype(fontpath, fontsize)

これが場合によってはエラーを起こすことがあり,

The _imagingft C module is not installed

となったときは以下のように解決するとよい。

# yum install freetype-devel libjpeg-devel libpng-devel
# pip uninstall pil pillow
# pip install pillow
# pip list
(これでpillowがあるか確認)

などのようにすると自分の環境では動作した。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0