第14次汇报 (2022.05.09)
本周完成的工作:
- 通过 Apache 服务器上的 PHP 接口做中转, 调用了用 WSGIServer 跑起来的深度学习模型接口.
- 着手撰写毕设论文.
还需要完成的工作:
完成毕设论文.
深度学习模型方面
- 怎么检测和提高模型的准确程度?
微信小程序方面
- 提高用户使用小程序的体验。如用户点击诊断结果中的疾病,就可以查看该疾病的简介和康复建议。
在 Apache 服务器用 PHP 做中转
- 为什么
- 因为想要发布微信小程序, wx.request 中请求的url必须是https的域名形式; 之前我是用WSGIServer中将预测图片的接口跑起来的, 而要真正的发布, 必须要通过 Apache / Nginx 等服务器做中转, 因为WSGIServer是没有地方放ssl证书的.
- 怎么做
- 在 Apache 上写一个 predict.php, 用来接收前端微信小程序发过来的表单数据文件 (文件名为时间戳) , 保存到指定路径中 ( 路径文件夹的权限要设为777 ), 然后通过PHP的curl扩展, 用ip调用5000端口处跑起来的深度学习预测模型, 只要传给它文件保存的地址即可. 然后5000端口的predict接口直接去相应路径找文件进行分析即可. [特别感谢曹博宇同学的思路指点]
Apache 服务器路径下的 predict.php
<?php
$file_path = '/root/ECG/src/uploads/'.time().'.jpg';
$tmp = $_FILES['file']['tmp_name'];
$error=$_FILES['file']['error'];
// move_uploaded_file($tmp, $file_path);
if(!move_uploaded_file($tmp, $file_path)) {
echo "An error has occurred moving the uploaded file.<BR>";
echo "Please ensure that if safe_mode is on that the " . "UID PHP is using matches the file.";
exit;
}
function request_post($url = '', $param = '') {
if (empty($url) || empty($param)) {
return false;
}
$postUrl = $url;
$curlPost = $param;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$postUrl);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
$sUrl = 'http://120.26.86.149:5000/predict';
$aData = array(
'file_path' => $file_path
);
echo request_post($sUrl, $aData);
?>
src/app.py 中 /predict 接口的变化
@app.route('/predict', methods=['GET', 'POST'])
def upload():
if request.method == 'POST':
# 预处理
# 接口1:
# f = request.files['file'] # 获取前端通过POST方法提交的文件;
# if not f:
# return "宁还没上传文件吧!"
# basepath = os.path.dirname(__file__)
# mkdir_recursive('src/uploads') # 递归地创建目录;(定义在utils.py中)
# file_path = os.path.join(basepath, 'uploads', 'lalala')
# try:
# print("您之前已经上传过同名文件了, 我会将原来的文件删除, 上传新文件并对它进行分析~ ")
# print("You already analyzed the data file. We delete it and re-analyze it!")
# os.remove(file_path)
# except:
# print("您新传了一个文件! (The file is new!)")
# f.save(file_path)
# 接口2:
file_path = request.form['file_path']
img = cv2.imread(file_path)
os.remove(file_path)
h, w, _ = img.shape[0:3]
h = math.floor(h)
w = math.floor(w)
ci = ColorImage(img)
ip = InputParameters(
rotation = -0.0,
timeScale = 25,
voltScale = 10,
leads = {LeadId(6) : Lead(x=0, y=0, width=w, height=h, startTime=0.0)}
)
signals, samplingPeriod = convertECGLeads(ci, ip) # 其中signals是一堆np.ndarray;
signal = signals[LeadId(6)]# 我们只上传V1波形这一个波形进行处理;
# 新增: 给所有的信号取负值:
for i in range(len(signal)):
signal[i] = -signal[i]
sr = 1 / samplingPeriod # 采样率和采样周期互为倒数;
print(signal)
# 这是核心的一句话:
predicted, result = model_predict(model, signal, sr)
length = len(predicted)
result = "您所上传的心电图的分析结果如下: \n"+result
return result
return None
一些重要的目录
-
/etc
- 用rpm安装PHP的话, PHP的默认安装目录
-
/etc/rpm/macros.php
-
这个文件中有PHP的各个重要文件夹在哪里 ( 用rpm安装的话 )
# # Interface versions exposed by PHP: # %php_core_api 20100412-64 %php_zend_api 20100525-64 %php_pdo_api 20080721-64 %php_version 5.4.16 %php_extdir %{_libdir}/php/modules %php_inidir %{_sysconfdir}/php.d %php_incldir %{_includedir}/php %__php %{_bindir}/php
-
-
可以在最顶级目录下查找 php 来寻找PHP安装的各个文件
-
cd / find -name 'php' -ls 792719 4 drwxr-xr-x 4 root root 4096 Apr 29 2021 ./usr/lib64/php 799929 4 drwxr-xr-x 2 root root 4096 Apr 1 2020 ./usr/share/php 801189 4 drwxr-xr-x 8 root root 4096 Apr 29 2021 ./usr/include/php 685932 4512 -rwxr-xr-x 1 root root 4618080 Apr 1 2020 ./usr/bin/php 1321764 4 drwxr-xr-x 2 root root 4096 Apr 18 16:41 ./root/anaconda3/envs/ecg/lib/python3.7/site-packages/tensorflow_core/include/google/protobuf/compiler/php 2230198 4 drwxr-xr-x 2 root root 4096 Apr 18 11:26 ./root/anaconda3/lib/python3.7/site-packages/notebook/static/components/codemirror/mode/php 2229630 4 drwxr-xr-x 2 root root 4096 Apr 18 11:26 ./root/anaconda3/pkgs/notebook-5.6.0-py37_0/lib/python3.7/site-packages/notebook/static/components/codemirror/mode/php 263478 4 drwxr-xr-x 3 root root 4096 Apr 29 2021 ./var/lib/php
-
-
/etc/httpd/conf/httpd.conf
- Apache的配置文件