import cv2
import numpy as np
from flask import Flask, request, make_response,jsonify
import numpy as np
import json
import urllib.request
from urllib.request import Request, urlopen
import base64
import numpy as np
from flask import Flask, render_template, request, redirect, url_for, send_from_directory
import logging
app = Flask(__name__,static_url_path='')
def preprocess_img(img,target_size=(299,299)): #img가공
if (img.shape[2] == 4):
img = cv2.cvtColor(img, cv2.COLOR_BGRA2BGR)
img = cv2.resize(img,target_size) #img사이즈 바꿔줌
img = np.divide(img,255.)
img = np.subtract(img,0.5)
img = np.multiply(img,2.)
return img
def load_im_from_url(url): #img를 url주소에 들어가서 사진만 가져오기
requested_url = urlopen(Request(url,headers={'User-Agent': 'Mozilla/5.0'}))
image_array = np.asarray(bytearray(requested_url.read()), dtype=np.uint8)
print (image_array.shape)
print (image_array)
image_array = cv2imdecode(image_array, -1)
print (image_array.shape)
return image_array
def load_im_from_system(url): #img를 array로 길게 문자열로 바꿔주는 거같음
image_url = url.split(',')[1]
image_url = image_url.replace(" ", "+")
image_array = base64.b64decode(image_url)
#image_array = np.asarray(bytearray(image_array), dtype=np.uint8)
image_array = np.fromstring(image_array, np.uint8)
image_array = cv2.imdecode(image_array, -1) #img를 decode해주고 밑에서 최종 return
return image_array
def predict(img):
sess = tf.InteractiveSession()
new_saver = tf.train.import_meta_graph('C:\\Users\\Yoona\\Desktop\\drive-download-20190613T041306Z-001\\my_test_model2.ckpt.meta')
new_saver.restore(sess, 'C:\\Users\\Yoona\\Desktop\\drive-download-20190613T041306Z-001\\my_test_model2.ckpt')
img=np.reshape(img,[-1,784])
print (img.shape)
x = sess.graph.get_tensor_by_name("x:0")
y = sess.graph.get_tensor_by_name("y_true:0")
hypothesis = sess.graph.get_tensor_by_name("operation:0")
k=sess.graph.get_tensor_by_name("keep_prob:0")
result = sess.run(hypothesis, feed_dict={x:img,k:1.0})
flower_number = sess.run(tf.argmax(result,1))
ra = np.array([flower_number])
ra= np.vstack([ra,float(result[0][sess.run(tf.argmax(result,1))])]) #이중배열로 [[2.][1.]] 이렇게 출력됨
return ra
@app.route('/classify_system', methods=['GET'])
def classify_system():
image_url = request.args.get('imageurl')
image_array = load_im_from_system(image_url) #위에 load함수 써서 image를 array로 저장
resp = predict(image_array) #위의 predict함수에 img넣고 예측한 값을 resp에 저장
result = []
print(resp[0]) #어떻게 저장되어있는지 확인하면 그 형식대로 predict돌리고 나서 저장할때 resp꼴 맞게 코드 바꿔야됨
print(resp.shape)
result.append({"Class Name":float(resp[0])})
result.append({"Score":float(resp[1])})
return jsonify({'results':result})
@app.route('/classify_url', methods=['GET']) #url과 system이 뭐가 다를까?
def classify_url():
image_url = request.args.get('imageurl')
image_array = load_im_from_url(image_url)
resp = predict(image_array)
result = []
result.append({"Class Name":float(resp[0])})
result.append({"Score":float(resp[1])})
#for r in resp[0]:
#result.append({"Class Name":r[1],"Score":float(r[2])})
return jsonify({'results':result})
@app.route('/classify-system', methods=['GET'])
def do_system():
return app.send_static_file('system.html')
@app.route('/classify-url', methods=['GET'])
def do_url():
return app.send_static_file('url.html')
@app.route('/', methods=['GET'])
def root():
return app.send_static_file('index.html')
if __name__ == '__main__':
app.run(host='127.0.0.1', port=70, debug=True)
오늘 체크포인트 받은걸로 코드 수정했어 predict를 우리 체크포인트로 CNN돌리는 거로 수정했고 이제 인터넷에서 가져오는 이미지 28x28 로 바꿔서 우리 코드에 맞게 돌아가게만 하면 될거 같아~! 근데 이게 이미지를 구글에서 바로 가져오는거 아니면 사진이 뜨는게 아니라 '이미지를 출력할 수 없습니다'로 뜨는데 이것도 한번 봐야할거같아ㅜㅜ 이건 웹 공부를 더 해서 이미지 출력 부분을 공부하면 될 거 같아 다같이 화이팅 할 수 있다~!~!~!~!~!!~!
그리고 이거 VScode 에서 돌리면 오른쪽 버튼 눌러서 run python file in terminal 누르면 밑에 터미날에 결과 출력돼 근데 print('hello') 이런거는 잘 출력 되는데 print(array.shape) 이런거는 왜 출력 안되는지 모르겠음..ㅜㅜ 그래서 형식 맞춰줄 때 파이썬 IDLE로 해본거 위에 사진이얌 다들 모르겠는거 물어보셍용 ㅇ★ㅇ
오늘 체크포인트 받은걸로 코드 수정했어 predict를 우리 체크포인트로 CNN돌리는 거로 수정했고 이제 인터넷에서 가져오는 이미지 28x28 로 바꿔서 우리 코드에 맞게 돌아가게만 하면 될거 같아~! 근데 이게 이미지를 구글에서 바로 가져오는거 아니면 사진이 뜨는게 아니라 '이미지를 출력할 수 없습니다'로 뜨는데 이것도 한번 봐야할거같아ㅜㅜ 이건 웹 공부를 더 해서 이미지 출력 부분을 공부하면 될 거 같아 다같이 화이팅 할 수 있다~!~!~!~!~!!~!
그리고 이거 VScode 에서 돌리면 오른쪽 버튼 눌러서 run python file in terminal 누르면 밑에 터미날에 결과 출력돼 근데 print('hello') 이런거는 잘 출력 되는데 print(array.shape) 이런거는 왜 출력 안되는지 모르겠음..ㅜㅜ 그래서 형식 맞춰줄 때 파이썬 IDLE로 해본거 위에 사진이얌 다들 모르겠는거 물어보셍용 ㅇ★ㅇ