[클라이언트 - 서버 - 머신러닝 서버] 의 구조로 시스템을 구성했다.

클라이언트에서 서버로 이미지를 업로드 하는 부분은 글을 작성했고, 

서버에서 머신러닝 서버로 이미지를 보내고 머신러닝 결과를 다시 반환해 중계 서버에서 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로 내보내도록 해주는 메소드이다.

+ Recent posts