teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

6

スペルミス

2020/08/29 13:04

投稿

mito.2357
mito.2357

スコア19

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 "Writed."
62
+ return "Wrote."
63
63
 
64
64
 
65
65
  def compress_img(img, quality=10, ch=1):

5

追記

2020/08/29 13:04

投稿

mito.2357
mito.2357

スコア19

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

修正もれの修正

2020/08/28 06:08

投稿

mito.2357
mito.2357

スコア19

title CHANGED
File without changes
body CHANGED
@@ -70,7 +70,7 @@
70
70
  return cv2.imdecode(img, ch)
71
71
  ```
72
72
  ### 試したこと
73
- 1. 上記のエラー(上側)`ImportError: numpy.core.multiarray failed to import`をgoogleで調べたところ, numpyをアップグレードすればよいとの情報が複数見つかりましたが、これ以上アップグレードができませんでした。おそらくXserverの環境によるもの, もしくはpythonのバージョンが3.6であるためだと考えました。
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.別の関数内でインポートし呼び出ししてみましたが、関数が呼び出されるとエラー(上記の下側)`ImportError: libGLX.so.0: failed to map segment from shared object: Cannot allocate memory'`が発生してしまいました。このエラーをgoogleで調べましたが特に情報は発見できませんでした。メモリの不足かと思いましたが`from flask_sqlalchemy import SQLAlchmey`がなければ正常に動作したので関係ないと判断しました。
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

ソースコードを簡潔にした

2020/08/27 10:33

投稿

mito.2357
mito.2357

スコア19

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 os
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
- db.create_all(app=app)
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
- @login_manager.user_loader
57
+ img = cv2.imread(PATH)
58
+ img = cv2.resize(img, (100, 100))
59
- def load_user(user_id):
59
+ img = compress_img(img)
60
- return User.query.get(user_id)
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=50, ch=1):
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

タグの追加

2020/08/27 10:31

投稿

mito.2357
mito.2357

スコア19

title CHANGED
File without changes
body CHANGED
File without changes

1

表現の変更

2020/08/27 07:42

投稿

mito.2357
mito.2357

スコア19

title CHANGED
@@ -1,1 +1,1 @@
1
- レンタルサーバー上で画像処理したいが、ある条件満たすとopencvがインポートできない
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