質問編集履歴
6
スペルミス
title
CHANGED
File without changes
|
body
CHANGED
@@ -59,7 +59,7 @@
|
|
59
59
|
img = compress_img(img)
|
60
60
|
cv2.imwrite(PATH, img)
|
61
61
|
|
62
|
-
return "
|
62
|
+
return "Wrote."
|
63
63
|
|
64
64
|
|
65
65
|
def compress_img(img, quality=10, ch=1):
|
5
追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -96,4 +96,12 @@
|
|
96
96
|
os.environ['OPENBLAS_NUM_THREADS'] = "1"
|
97
97
|
```
|
98
98
|
### 補足情報(FW/ツールのバージョンなど)
|
99
|
-
linuxbrewでpythonをインストールしようとしましたがどうしても失敗してしまうのでvenvを使ってライブラリをインストールしました。さらにXserverではsudoコマンドの権限が与えられていないためこれ以上のpythonのバージョンアップはできません。
|
99
|
+
linuxbrewでpythonをインストールしようとしましたがどうしても失敗してしまうのでvenvを使ってライブラリをインストールしました。さらにXserverではsudoコマンドの権限が与えられていないためこれ以上のpythonのバージョンアップはできません。
|
100
|
+
|
101
|
+
### 追記
|
102
|
+
**freeコマンドの結果**
|
103
|
+
```
|
104
|
+
total used free shared buff/cache available
|
105
|
+
Mem: 527830880 11427176 502397556 626092 14006148 516403704
|
106
|
+
Swap: 23328924 0 23328924
|
107
|
+
```
|
4
修正もれの修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -70,7 +70,7 @@
|
|
70
70
|
return cv2.imdecode(img, ch)
|
71
71
|
```
|
72
72
|
### 試したこと
|
73
|
-
1. 上記のエラー
|
73
|
+
1. 上記のエラー`ImportError: numpy.core.multiarray failed to import`をgoogleで調べたところ, numpyをアップグレードすればよいとの情報が複数見つかりましたが、これ以上アップグレードができませんでした。おそらくXserverの環境によるもの, もしくはpythonのバージョンが3.6であるためだと考えました。
|
74
74
|
|
75
75
|
2. 次にコードを削ったりしてみたところ, 以下の条件が重なることでエラーが発生していることが分かりました。
|
76
76
|
|
@@ -78,7 +78,7 @@
|
|
78
78
|
- @app.routeでデコレートしている関数内で`import cv2`
|
79
79
|
(前者は大幅にコードを書き換えなけらばならないため別の方法でデータベースを操作するのは避けたいです)
|
80
80
|
|
81
|
-
3.別の関数内でインポートし呼び出ししてみましたが、関数が呼び出されるとエラー
|
81
|
+
3.別の関数内でインポートし呼び出ししてみましたが、関数が呼び出されるとエラー`ImportError: libGLX.so.0: failed to map segment from shared object: Cannot allocate memory'`が発生してしまいました。このエラーをgoogleで調べましたが特に情報は発見できませんでした。メモリの不足かと思いましたが`from flask_sqlalchemy import SQLAlchmey`がなければ正常に動作したので関係ないと判断しました。
|
82
82
|
|
83
83
|
---
|
84
84
|
|
3
ソースコードを簡潔にした
title
CHANGED
File without changes
|
body
CHANGED
@@ -6,7 +6,15 @@
|
|
6
6
|
|
7
7
|
`from flask_sqlalchemy import SQLAlchmey`が含まれると`import cv2`がエラーしてしまう。
|
8
8
|
|
9
|
+
**以下の該当のソースコードのtraceback**
|
9
10
|
```
|
11
|
+
File "/home/xs000000/---.com/public_html/test/test.py", line 14, in index import cv2
|
12
|
+
|
13
|
+
File "/home/xs000000/venv3.6/lib64/python3.6/site-packages/cv2/__init__.py", line 5, in from .cv2 import * MemoryError
|
14
|
+
```
|
15
|
+
|
16
|
+
**実際に運用しようとしているソースコードのtraceback**
|
17
|
+
```
|
10
18
|
File "/home/xs000000/--.com/public_html/test/app.py", line 84,
|
11
19
|
in index import cv2
|
12
20
|
|
@@ -31,63 +39,35 @@
|
|
31
39
|
|
32
40
|
```python
|
33
41
|
# -*- coding: utf-8 -*-
|
42
|
+
# NOTE cv2は関数内インポートしている. cgiエラーするため.
|
34
|
-
import
|
43
|
+
from flask import Flask
|
35
|
-
|
44
|
+
from flask_sqlalchemy import SQLAlchemy
|
36
45
|
|
37
|
-
# NOTE numpyとcv2は関数内インポートしている. cgiエラーするため.
|
38
|
-
from flask import Flask, request
|
39
|
-
from flask_login import LoginManager
|
40
|
-
# ...省略
|
41
|
-
|
42
|
-
from database import db
|
43
|
-
# in from flask_sqlalchemy import SQLAlchemy
|
44
|
-
# from flask_login import UserMixin
|
45
|
-
|
46
|
-
PATH = "./uploads/sample.jpg"
|
47
|
-
|
48
46
|
app = Flask(__name__)
|
49
|
-
app.secret_key = "super secret key"
|
50
47
|
|
51
|
-
db.init_app(app)
|
52
|
-
|
48
|
+
FOLDER = "uploads"
|
49
|
+
FILENAME = "sample.jpg"
|
50
|
+
PATH = f"./{FOLDER}/{FILENAME}"
|
53
51
|
|
54
|
-
login_manager = LoginManager()
|
55
|
-
login_manager.init_app(app)
|
56
52
|
|
53
|
+
@app.route('/')
|
54
|
+
def index():
|
55
|
+
import cv2
|
57
56
|
|
58
|
-
|
57
|
+
img = cv2.imread(PATH)
|
58
|
+
img = cv2.resize(img, (100, 100))
|
59
|
-
|
59
|
+
img = compress_img(img)
|
60
|
-
|
60
|
+
cv2.imwrite(PATH, img)
|
61
61
|
|
62
|
+
return "Writed."
|
62
63
|
|
63
|
-
def from_fileStorage_to_nparray(file_):
|
64
|
-
import numpy as np
|
65
|
-
import cv2
|
66
|
-
img_array = np.asarray(bytearray(file_.stream.read()), dtype=np.uint8)
|
67
|
-
return cv2.imdecode(img_array, 1)
|
68
64
|
|
69
|
-
|
70
|
-
def compress_img(img, quality=
|
65
|
+
def compress_img(img, quality=10, ch=1):
|
71
66
|
import cv2
|
72
67
|
success, img = cv2.imencode('.jpg', img, [int(cv2.IMWRITE_JPEG_QUALITY), quality])
|
73
68
|
if not success:
|
74
69
|
return None
|
75
70
|
return cv2.imdecode(img, ch)
|
76
|
-
|
77
|
-
|
78
|
-
@app.route('/', methods=['POST'])
|
79
|
-
def index():
|
80
|
-
import cv2
|
81
|
-
|
82
|
-
img = request.files['image']
|
83
|
-
|
84
|
-
img = from_fileStorage_to_nparray(img)
|
85
|
-
img = cv2.resize(img, (100, 100))
|
86
|
-
img = compress_img(img)
|
87
|
-
cv2.imwrite(PATH, img)
|
88
|
-
|
89
|
-
return "Hello, World!"
|
90
|
-
|
91
71
|
```
|
92
72
|
### 試したこと
|
93
73
|
1. 上記のエラー(上側)`ImportError: numpy.core.multiarray failed to import`をgoogleで調べたところ, numpyをアップグレードすればよいとの情報が複数見つかりましたが、これ以上アップグレードができませんでした。おそらくXserverの環境によるもの, もしくはpythonのバージョンが3.6であるためだと考えました。
|
2
タグの追加
title
CHANGED
File without changes
|
body
CHANGED
File without changes
|
1
表現の変更
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
レンタルサーバー上で画像処理したいが、
|
1
|
+
レンタルサーバー上で画像処理したいが、SQLAlchemyをインポートするとOpenCVがインポートできない
|
body
CHANGED
@@ -98,7 +98,7 @@
|
|
98
98
|
- @app.routeでデコレートしている関数内で`import cv2`
|
99
99
|
(前者は大幅にコードを書き換えなけらばならないため別の方法でデータベースを操作するのは避けたいです)
|
100
100
|
|
101
|
-
3.別の関数内でインポートし呼び出ししてみましたが、関数が呼び出されるとエラー(上記の下側)`ImportError: libGLX.so.0: failed to map segment from shared object: Cannot allocate memory'`が発生してしまいました。このエラーをgoogleで調べましたが特に情報は発見できませんでした。メモリの不足かと思いましたが`from flask_sqlalchemy import SQLAlchmey`がなければ正常に動作したので関係ないと
|
101
|
+
3.別の関数内でインポートし呼び出ししてみましたが、関数が呼び出されるとエラー(上記の下側)`ImportError: libGLX.so.0: failed to map segment from shared object: Cannot allocate memory'`が発生してしまいました。このエラーをgoogleで調べましたが特に情報は発見できませんでした。メモリの不足かと思いましたが`from flask_sqlalchemy import SQLAlchmey`がなければ正常に動作したので関係ないと判断しました。
|
102
102
|
|
103
103
|
---
|
104
104
|
|
@@ -108,7 +108,7 @@
|
|
108
108
|
|
109
109
|
**現在の状態に至るまで**
|
110
110
|
|
111
|
-
1. ローカル環境で正常に動作しているwebアプリケーションをXserverにアップロードしたところcgiエラー500が発生。`import numpy` `import cv2`がなければ動作したためこの二つによるものと判明
|
111
|
+
1. ローカル環境で正常に動作しているwebアプリケーションをXserverにアップロードしたところcgiエラー(500 Internal Server Error)が発生。`import numpy` `import cv2`がなければ動作したためこの二つによるものと判明
|
112
112
|
|
113
113
|
2. googleで調べるとnumpyのマルチスレッドが原因であり, 以下のように環境変数でシングルスレッドにして, かつ関数内でimportすればよいとの情報が見つかり, numpyのimportによるエラーが解決
|
114
114
|
```cgi
|