[클라이언트 - 서버 - 머신러닝 서버] 의 구조로 시스템을 구성했다.
클라이언트에서 서버로 이미지를 업로드 하는 부분은 글을 작성했고,
서버에서 머신러닝 서버로 이미지를 보내고 머신러닝 결과를 다시 반환해 중계 서버에서 response를 받는 부분을 쓴다.
중계서버 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
@app.route('/upload', methods = ['GET', 'POST'])
def file_upload():
if request.method == 'POST': # POST 방식 처리
f = request.files['file1'] # 받아온 파일 객체 생성
s_filename = secure_filename(f.filename) # 파일명 저장
file_dir = 'uploads/' + s_filename # 파일을 저장하기 위한 경로 지정
f.save('static/uploads/' + s_filename) # 파일 저장
files = os.listdir("static/uploads")
upload = {'image': open('static/uploads/' + s_filename, 'rb')} # 업로드하기위한 파일
res = requests.post('http://127.0.0.1:81/receive', files=upload).json() # JSON 포맷, POST 형식으로 해당 URL에 파일 전송
machineResult = res['cal_result'] # 받아온 JSON 형식의 response를 처리함
# 데이터베이스 연결을 위한 connect 생성
conn = mysql.connect()
cursor = conn.cursor()
# 파일명과 파일경로를 데이터베이스에 저장함
sql = "INSERT INTO images (image_name, image_dir) VALUES ('%s', '%s')" % (s_filename, file_dir)
cursor.execute(sql) # sql문 입력
data = cursor.fetchall() # 처리 결과
if not data:
conn.commit() # 수정 내용을 저장함
return jsonify({"cal_result": machineResult}) # 결과 값 반환
else:
conn.rollback() # 수정 내용을 저장하지 않음
return 'upload failed'
# 데이터베이스와 연결 종료
cursor.close()
conn.close()
|
cs |
머신러닝 서버 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
@app.route('/receive', methods=['GET', 'POST'])
def receive():
if request.method == 'POST':
f = request.files['image'] # 보낸 파일을 받아옴
f.save('static/images/' + secure_filename(f.filename)) # 해당 파일 저장
files = os.listdir("static/images")
remove_background.remove('static/images/' + secure_filename(f.filename)) # 배경 제거
# 머신러닝 결과를 변수에 저장
predition = model.predict_food_transfer(model_transfer, test_transform, class_names, 'static/images/result.jpg')
os.remove('static/images/' + secure_filename(f.filename))
return jsonify({"cal_result": predition}) # 머신러닝 결과 반환
|
cs |
파이썬이라 구현하기 쉽다.
jsonify는 flask에서 지원하는 사용자가 json data로 내보내도록 해주는 메소드이다.
'프로젝트 > 플라스크 웹서버 구축' 카테고리의 다른 글
파이썬 플라스크(Flask) 로컬 서버에 파일 업로드하고 출력하기 (7) | 2020.09.01 |
---|---|
파이썬 플라스크(Flask) 웹 서버 구축 (3) - 게시판 만들기 (1) | 2020.08.21 |
[Python] 플라스크(Flask) 메소드 분석 (0) | 2020.08.21 |
파이썬 플라스크(Flask) 웹 서버 구축 (2) - DB연동, 회원가입 (1) | 2020.08.18 |
파이썬 플라스크(Flask) 웹 서버 구축 - 페이지 이동 (0) | 2020.08.18 |