Anacondaで作った画像処理プログラムをApache+Djangoで動かしたくなったので簡単な自分用メモ。SSLとかセキュリティ的なことは全くしていません。
https://qiita.com/hinoma/items/5b881b8ac531a0ba7953 の続きになります。
とりあえず文字メインです。画像などはまだ用意してないので、後々準備できたら載せます。
#Djangoプロジェクト
前回の記事そのままだとCSSが動きません。そのため,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ファイルを入れます.
# 追記
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があるか確認)
などのようにすると自分の環境では動作した。