项目实训已经到了最后一周,接下来是有关项目最后三篇博客了。
按照规定一周至少更新三篇博客,但是工作内容决定我的工作会是前紧后松。为了使最后一周也有充实的内容可写,我便把工作记录博客匀了匀,实际完成该内容的时间大约提前博客记录一周。
上篇之后,剩下的较大的功能就是上传食谱后与识别的对接了。有关这项工作,首先与专攻识别的同学进行了沟通,将识别原先的“手动选择图片—识别”改为了“后端传入新传的图片—识别”。专攻识别的同学顺利为我达成了后者的需求。
接下来我便先调通该代码,再融入到自己的跳转逻辑内。
调通代码方面,主要遇到了两个问题:
其一是配置环境,一般的缺包装包是比较流畅的,但识别涉及到了“from flask_sqlalchemy import SQLAlchemy”,这两个包比较特殊,攻略装包总是中断。无奈之下,想起来之前机器学习课设有配置过这两个包的环境,于是进行了阵地转移,将实验环境整体换为那份实验用过的环境,再重新装flask相关的包。如此迂回的策略终于顺利结决了环境的难题。
其二是路径问题,识别的代码内规定了些路径,导致数据库内的图片路径不适用于此份代码。定位问题所在后,多次调整声明路径的描述字符以及HTML调用其他文件的路径,得以顺利解决。
代码调通之后,我便利用专攻识别的同学提供的代码就行正式的对接。
首先模仿数据库同学的数据库筛选数据的代码,完成一份read_pic()的函数,用以读出数据库内最新传入的图片和菜谱名字。代码如下:
def read_pic(user_id):
conn = psycopg2.connect()
cursor = conn.cursor()
conn.autocommit = True
sql = "select food_name, url from FOOD_TABLE,RELATION_TABLE WHERE relation_table.id='" + user_id + "'AND FOOD_TABLE.food_id=RELATION_TABLE.food_id AND RELATION_TABLE.relationship='0'"
print(sql)
cursor.execute(sql)
pic_result = cursor.fetchall()
conn.commit()
return pic_result
然后,在py文件内将上步选出的数据传入识别的HTML,进行使用:
# 饮食识别页面
@app.route('/f_identify')
def food_identify():
user_ID = 1471
user_name = '小小姚'
ID = np.str(user_ID)
pic_result = backinform.read_pic(ID) # 读数据库并传到变量result内
data = np.array(pic_result) # 列表转化为数组,便于操作
number = data.shape[0]-1 # 获取数组最后一行数据的下标
print(data[number][1])
return render_template('identify.html', f_pic=data[number][1], f_name=data[number][0])
最后,将HTML的post路径调通,py文件对应post的部分也改为数据库选图片,得以最终实现上传识别的对接。
此时的对接成功实现了在上传后点击进入识别页面,但识别页面尚有冗余窗口。这一点测试组同学后来也发现了,将在下篇进行解决的记录。