2022.05.09-高宝琪毕设阶段性汇报

第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的配置文件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值