生什么什么什么| 唯小人与女子难养也什么意思| 急性荨麻疹不能吃什么食物| 什么屎不臭| 利大于弊是什么意思| 咽炎吃什么药效果好| 尿糖2个加号是什么意思| 蟑螂吃什么东西| 什么积木| 扁桃体割了对身体有什么影响| pvs是什么意思| 驴友是什么意思| 什么东西越吃越饿| 肝脏挂什么科| 尿路感染挂什么科| 胃溃疡可以吃什么水果| 糠是什么东西| 月子期间可以吃什么水果| 心脏跳得快是什么原因| est.是什么意思| 失眠吃什么药最有效| 变形虫是什么生物| 输卵管堵塞有什么症状| 利尿是什么意思| 什么情况下会得甲亢| 几何图形是什么| 夏天为什么不能喝中药| 对对子是什么意思| 破太岁是什么意思| 脂肪肝什么意思| 铁窗泪什么意思| 夏至是什么时候| 秃顶是什么原因造成的| 41是什么意思| 突然头晕目眩是什么原因| sat是什么考试| 减肥可以吃什么主食| 蛛网膜囊肿是什么病| 芭乐是什么季节的水果| 火龙果什么时候开花| 急性咽炎吃什么药| 怀孕孕酮低吃什么补得快| 狗贫血吃什么补血最快| 家里有小蜘蛛预示什么| 草果长什么样| 猪脚和猪蹄有什么区别| 小金人车标是什么车| 怀孕什么时候吃鹅蛋最好| z代表什么| 甲状腺球蛋白抗体高是什么意思| 走资派是什么意思| 紫萱名字的含义是什么| 檄文是什么意思| 下巴下面长痣代表什么| 丰胸吃什么| 绀是什么意思| 砚是什么意思| 桃子像什么| 可否是什么意思| 乳腺结节不能吃什么食物| 类风湿阳性是什么意思| 孙权孙策什么关系| 麦的部首是什么| 胃粘膜脱落什么症状严重吗| 农历7月是什么月| 今年78岁属什么生肖| 门字五行属什么| 早晨醒来口苦是什么原因| 慢慢地什么填词语| 五月天主唱叫什么名字| 口水歌是什么意思| 心脏支架是什么材料做的| 新生儿什么时候剪头发| 5月3号是什么星座| tr什么意思| 利有攸往是什么意思| 阿魏是什么中药| 小孩晚上不睡觉是什么原因| 9月26号是什么星座| 老花眼有什么办法可以恢复| 2024什么年属什么年| 肌酐高说明什么问题| 孝顺的真正含义是什么| 纯阴八字为什么要保密| 四个横念什么| 宝宝咳嗽吃什么药| 大姨妈量多是什么原因| 铠是什么意思| 朱砂是什么做的| 阳历3月是什么星座| 天哭星是什么意思| 牛顿发明了什么| 一级军士长相当于什么级别| 卖淫什么意思| 上火了吃什么降火最快| 疮疖是什么意思| 扁桃体2度是什么意思| 淋巴排毒是什么意思| 能量是什么| 甲状腺结节吃什么盐| 小孩发烧可以吃什么水果| 挪揄是什么意思| 血痰是什么原因| 五月七日是什么星座| 舌头有齿痕吃什么药| aldo是什么牌子| 四联单是什么| 五灵脂是什么| 检查胰腺做什么检查| 冰粉是什么| d2聚体高是什么原因| 膈应人是什么意思| 回奶吃什么| 什么鱼最大| 八婆什么意思| 为什么会得玫瑰糠疹| 淼怎么读什么意思| 月亮为什么是红色的| 乙状结肠是什么意思| 吃什么推迟月经| 枸杞泡水喝有什么作用和功效| 头发爱出油什么原因| sp是什么面料| 井什么有什么| 风向标是什么意思| 阴部痒什么原因| 神经官能症挂什么科| 改姓需要什么手续| 胃黏膜病变是什么意思| 脸书是什么意思| 用什么擦地最干净| 弱水是什么意思| 唇炎吃什么药| 相思什么意思| 四百分能上什么大学| 阻生齿是什么意思| 敲锣打鼓是什么生肖| 阴茎不够硬吃什么药| ket是什么意思| 小孩喜欢吃什么菜| 腰酸背痛是什么原因| 轻微脑震荡吃什么药| 卡介苗预防什么病| 包菜是什么菜| sec是什么单位| 宝宝不喝奶是什么原因| 月亮什么时候是圆的| 5月16日是什么星座| 梦见水果是什么意思| 性行为是什么意思| 21度穿什么衣服| 性取向是什么| 肠手术后吃什么恢复快| 山竹不能和什么水果一起吃| 肛门指检能查出什么| 县局局长什么级别| 数字7代表什么意思| 罗勒叶在中国叫什么| 心脏早搏吃什么药效果好| 无缘无故头疼是什么原因| 胆囊炎吃什么药效果最好| 按摩spa是什么意思| 脑梗有什么特效药| 益母草煮鸡蛋有什么功效| 泰山石敢当什么意思| 老八是什么意思| 啵啵是什么| 蛞蝓是什么动物| 拔完牙可以吃什么| 头晕视力模糊是什么原因| 七个月宝宝能吃什么水果| 四肢麻木是什么原因引起的| 鼻子旁边有痣代表什么| 哈戳戳是什么意思| 扁桃体发炎吃什么食物| 焗油和染发有什么区别| 感染性腹泻吃什么药| 术后吃什么消炎药| 什么叫私人会所| abc是什么药| 醋泡脚有什么好处| 胆红素偏高是什么意思| hcg是检查什么的| 社会科学院是干什么的| 先兆性流产是什么意思| 总胆红素偏高什么意思| 楚门的世界是什么意思| 尿道口流白色液体是什么病| 孕检都检查什么项目| 人活一辈子到底为了什么| 先祖是什么意思| ec50是什么意思| 为什么拉屎会出血| 抗炎和消炎有什么区别| birads3类是什么意思| 为什么会缺钙| 溃疡是什么意思| 针眼用什么眼药水| 浮水是什么意思| 花旦是什么意思| 松塔有什么用| 姝五行属什么| 沉香对人体有什么好处| 死有余辜什么意思| 焦亚硫酸钠是什么| bv是什么品牌| 孕妇有狐臭擦什么最好| 充电宝100wh是什么意思| 总蛋白偏低是什么原因| 休息是什么意思| edc是什么意思| gtp是什么意思| 咽喉有异物感吃什么药| 丹毒用什么药膏| bra是什么| 1月30号是什么星座| 骨头疼是什么病的征兆| 冬瓜与什么食物相克| 腠理是什么意思| 睡觉头晕是什么原因引起的| 为什么犹太人聪明| 尿比重是什么| 植物园里有什么植物| 波罗蜜是什么意思| 尿酸ua偏高是什么意思| 饱和度是什么意思| 魔芋粉是什么做的| 常州冬至吃什么| 珍珠龟吃什么| 激素六项都是查什么| 胎膜早破是什么原因引起的| 缩量横盘意味着什么| 覆盖的意思是什么| 荷尔蒙是什么| 技师是干什么的| 什么叫留守儿童| 什么水果可以泡酒| 郁金香的花语是什么| 哈尔滨机场叫什么名字| 什么叫肝功能不全| 羊水暗区是什么意思| 鱼翅是什么| 什么水适合婴儿冲奶粉| 狮子座女和什么座最配| 极核是什么| gap什么意思| 女生排卵期在什么时候| 今天中国什么节日| 乳头疼吃什么药| 碳酸钙是什么| 口臭口苦什么原因引起的| 分辨率dpi是什么意思| 区委书记什么级别| a型血为什么叫贵族血| 横纹肌溶解症是什么原因造成的| 失语是什么意思| 蚧壳虫用什么药| 中国国酒是什么酒| 身体发麻是什么原因| 喝什么茶降血脂| 男士生育检查挂什么科| 成什么结什么| 徒木立信是什么意思| 高等院校是什么意思| 百度
这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 ? 论坛首页 ? 嵌入式开发 ? STM32 ? 【STM32WBA55CG开发板】QT蓝牙数据通信应用与交互——3、基于QT与S

共1条 1/1 1 跳转至

【STM32WBA55CG开发板】QT蓝牙数据通信应用与交互——3、基于QT与STM32的数字图像识别与显示系统设计

菜鸟
2025-08-06 15:04:24     打赏
百度 中轴线及其延长线、长安街及其延长线限制各类用地调整为商务办公项目《清单》提出,中轴线及其延长线以文化功能为主,既要延续历史文脉,展示传统文化精髓,又要做好有机更新,体现现代文明魅力。

Hi~ 我又回来了。在之前的帖子中,我已经实现了PC端和STM32端的蓝牙数据交互,所以后面可以做的东西就很多了。上个帖子说过,这次会做一个QT + STM32 的具体应用,我大概看了一下,好像没有人用stm32做识别的,于是乎我就做一下吧,弥补一下这个空白。 


具体来说,我就做一个基于MNIST数据集的手写数字识别吧 。

视频演示:【STM32 手写数字识别 点阵显示 蓝牙传输数据】 

一、系统设计

用QT设计一个GUI界面,可以写字,写完数字,通过蓝牙把写的28x28的灰度数字发给STM32进行识别,识别之后通过屏幕之类的显示。系统框图如下:

image.png

二、QT 上位机设计

上位机蓝牙通信部分还是延续前两次的代码,但是需要做一个画图的界面,所以就需要加一个GUI专门画图像。

上位机界面如下:

image.png

具体代码上,在之前代码的基础上新添加一个drawingwidget.cpp ,默认画笔大小是20,这部分代码也是参考了别人的代码加以修改过来的。其中发送图片像素的函数给图片做了一个缩放,最后会变成28x28的图像,以适应mnist数据集。

DrawingWidget::DrawingWidget(QWidget *parent) :
    QWidget(parent), penColor(Qt::darkGray), drawingArea(50, 50, 280, 280)
{
    PenWidth=20;
}
DrawingWidget::~DrawingWidget()
{

}

void DrawingWidget::setPenColor(void)
{
    QColor color = QColorDialog::getColor(Qt::white, this, "选择颜色");
    if (color.isValid()) {
        penColor = color;
    }

}

void DrawingWidget::clearDrawing()
{
    points.clear();
    update();
}

QImage DrawingWidget::getDrawingBits(int scaleFactor){
    QPixmap pixmap(drawingArea.size());
    pixmap.fill(Qt::black);

    // 在 QPixmap 上绘制内容
    QPainter painter(&pixmap);
    QPen pen(penColor);
    pen.setWidth(PenWidth);
    painter.setPen(pen);

    // 平移 painter 以匹配绘图区域的相对坐标
    painter.translate(-drawingArea.topLeft());

    // 绘制线条
    painter.drawPolyline(QPolygon(point));
    for (auto p : points) {
        painter.drawPolyline(QPolygon(p));
    }

    // 缩放
    QPixmap scaledPixmap = pixmap.scaled(pixmap.size() / scaleFactor, Qt::KeepAspectRatio, Qt::SmoothTransformation);
    grayImage = scaledPixmap.toImage().convertToFormat(QImage::Format_Grayscale8);

    return grayImage;
}

void DrawingWidget::saveDrawing(const QString &filePath, int scaleFactor)
{
    // 创建一个与绘图区域相同大小的 QPixmap
    QPixmap pixmap(drawingArea.size());
    pixmap.fill(Qt::black);

    // 在 QPixmap 上绘制内容
    QPainter painter(&pixmap);
    QPen pen(penColor);
    pen.setWidth(PenWidth);
    painter.setPen(pen);

    // 平移 painter 以匹配绘图区域的相对坐标
    painter.translate(-drawingArea.topLeft());

    // 绘制线条
    painter.drawPolyline(QPolygon(point));
    for (auto p : points) {
        painter.drawPolyline(QPolygon(p));
    }

    // 缩放
    QPixmap scaledPixmap = pixmap.scaled(pixmap.size() / scaleFactor, Qt::KeepAspectRatio, Qt::SmoothTransformation);
    QImage grayImage = scaledPixmap.toImage().convertToFormat(QImage::Format_Grayscale8);
    //const uchar *data = grayImage.bits();             //only pix data
    //int size_T=grayImage.height()*grayImage.width();
    // 保存图片到文件
    if (!filePath.isEmpty()) {
        grayImage.save(filePath, "BMP");
    }
}


bool DrawingWidget::event(QEvent *event)
{
    QMouseEvent *e = static_cast<QMouseEvent *>(event);

    if (event->type() == QEvent::MouseMove) {
        if (drawingArea.contains(e->pos())) {
            point.append(e->pos());
            this->update();
        }
    } else if (event->type() == QEvent::MouseButtonRelease) {
        points.append(point);
        point.clear();
    } else if (event->type() == QEvent::Paint) {
        QPainter painter(this);

        // 绘制绘图区域边框
        QPen borderPen(Qt::DashLine);
        borderPen.setColor(Qt::gray);
        painter.setPen(borderPen);
        painter.drawRect(drawingArea);

        // 绘制用户的线条
        QPen pen(penColor);
        pen.setWidth(PenWidth);
        painter.setPen(pen);
        painter.drawPolyline(QPolygon(point));
        for (auto p : points) {
            painter.drawPolyline(QPolygon(p));
        }
    }
    return QWidget::event(event);
}


使用这个类的话直接 new 就行

drawingWidget_t = new DrawingWidget(this);
ui->verticalLayout_2->addWidget(drawingWidget_t);


图片数据发送部分,我选择了分成两个characteristic 发送,因为图片太大了(784 bytes),一次最多只能发500 bytes

void Widget::on_pushButton_Send_clicked()
{
    QImage imageBuf=drawingWidget_t->getDrawingBits(10);
    QByteArray byteArray1(reinterpret_cast<const char*>(imageBuf.bits()), 500);
    QByteArray byteArray2(reinterpret_cast<const char*>(imageBuf.bits()+500), 284);

    gatt_comm_t->Characteristic_Write_Trigger(0,byteArray1);
    gatt_comm_t->Characteristic_Write_Trigger(1,byteArray2);
}


三、STM32 程序设计

stm32 程序分为:接收触发识别、识别、显示,三个部分组成。

3.1 首先是接收,接收之后存到数组里。接收完成触发识别flag

/* Functions Definition ------------------------------------------------------*/
void P2P_SERVER_Notification(P2P_SERVER_NotificationEvt_t *p_Notification)
{
  /* USER CODE BEGIN Service1_Notification_1 */
  uint8_t *dataBuf=p_Notification->DataTransfered.p_Payload;
  uint8_t  dataLen=p_Notification->DataTransfered.Length;
	LOG_INFO_APP("\r\nData len:%d\r\n",dataLen);
  /* USER CODE END Service1_Notification_1 */
  switch(p_Notification->EvtOpcode)
  {
    /* USER CODE BEGIN Service1_Notification_Service1_EvtOpcode */

    /* USER CODE END Service1_Notification_Service1_EvtOpcode */

    case P2P_SERVER_TX_READ_EVT:
      /* USER CODE BEGIN Service1Char1_READ_EVT */
      LOG_INFO_APP("P2P_SERVER_TX_READ_EVT\r\n");

      /* USER CODE END Service1Char1_READ_EVT */
      break;

    case P2P_SERVER_TX_WRITE_NO_RESP_EVT:
      /* USER CODE BEGIN Service1Char1_WRITE_NO_RESP_EVT */
      //LOG_INFO_APP("P2P_SERVER_TX_WRITE_NO_RESP_EVT:%s\r\n",dataBuf);
			memcpy(recv_pic_1+recv_index1,dataBuf,dataLen);
			recv_index1+=dataLen;
			if(recv_index1==FIRST_PACKET_LEN){
				recv_index1=0;
			}
      /* USER CODE END Service1Char1_WRITE_NO_RESP_EVT */
      break;

    case P2P_SERVER_TX_WRITE_EVT:
      /* USER CODE BEGIN Service1Char1_WRITE_EVT */
      LOG_INFO_APP("P2P_SERVER_TX_WRITE_EVT:%s\r\n",dataBuf);
      /* USER CODE END Service1Char1_WRITE_EVT */
      break;

    case P2P_SERVER_TX_NOTIFY_ENABLED_EVT:
      /* USER CODE BEGIN Service1Char1_NOTIFY_ENABLED_EVT */
      LOG_INFO_APP("P2P_SERVER_TX_NOTIFY_ENABLED_EVT:%s\r\n",dataBuf);
      /* USER CODE END Service1Char1_NOTIFY_ENABLED_EVT */
      break;

    case P2P_SERVER_TX_NOTIFY_DISABLED_EVT:
      /* USER CODE BEGIN Service1Char1_NOTIFY_DISABLED_EVT */
      LOG_INFO_APP("P2P_SERVER_TX_NOTIFY_DISABLED_EVT:%s\r\n",dataBuf);
      /* USER CODE END Service1Char1_NOTIFY_DISABLED_EVT */
      break;

    case P2P_SERVER_RX_READ_EVT:
      /* USER CODE BEGIN Service1Char2_READ_EVT */

      /* USER CODE END Service1Char2_READ_EVT */
      break;

    case P2P_SERVER_RX_WRITE_NO_RESP_EVT:
      /* USER CODE BEGIN Service1Char2_WRITE_NO_RESP_EVT */

      //LOG_INFO_APP("P2P_SERVER_RX_WRITE_NO_RESP_EVT:%s\r\n",dataBuf);
			memcpy(recv_pic_2+recv_index1,dataBuf,dataLen);
			recv_index1+=dataLen;
			if(recv_index1==SECOND_PACKET_LEN){
				recv_index1=0;
        
        set_reg_flag(1);
			}
      /* USER CODE END Service1Char2_WRITE_NO_RESP_EVT */
      break;

    case P2P_SERVER_RX_WRITE_EVT:
      /* USER CODE BEGIN Service1Char2_WRITE_EVT */
      LOG_INFO_APP("P2P_SERVER_RX_WRITE_EVT:%s\r\n",dataBuf);
      /* USER CODE END Service1Char2_WRITE_EVT */
      break;

    case P2P_SERVER_RX_NOTIFY_ENABLED_EVT:
      /* USER CODE BEGIN Service1Char2_NOTIFY_ENABLED_EVT */
      LOG_INFO_APP("P2P_SERVER_RX_NOTIFY_ENABLED_EVT\r\n");
      /* USER CODE END Service1Char2_NOTIFY_ENABLED_EVT */
      break;

    case P2P_SERVER_RX_NOTIFY_DISABLED_EVT:
      /* USER CODE BEGIN Service1Char2_NOTIFY_DISABLED_EVT */
      LOG_INFO_APP("P2P_SERVER_RX_NOTIFY_DISABLED_EVT\r\n");
      /* USER CODE END Service1Char2_NOTIFY_DISABLED_EVT */
      break;

    case P2P_SERVER_SW_READ_EVT:
      /* USER CODE BEGIN Service1Char3_READ_EVT */
      LOG_INFO_APP("P2P_SERVER_SW_READ_EVT\r\n");
      /* USER CODE END Service1Char3_READ_EVT */
      break;

    case P2P_SERVER_SW_WRITE_NO_RESP_EVT:
      /* USER CODE BEGIN Service1Char3_WRITE_NO_RESP_EVT */
      LOG_INFO_APP("P2P_SERVER_SW_WRITE_NO_RESP_EVT:%s\r\n",dataBuf);
      /* USER CODE END Service1Char3_WRITE_NO_RESP_EVT */
      break;

    case P2P_SERVER_SW_WRITE_EVT:
      /* USER CODE BEGIN Service1Char3_WRITE_EVT */
      LOG_INFO_APP("P2P_SERVER_SW_WRITE_EVT:%s\r\n",dataBuf);
      /* USER CODE END Service1Char3_WRITE_EVT */
      break;

    case P2P_SERVER_SW_NOTIFY_ENABLED_EVT:
      /* USER CODE BEGIN Service1Char3_NOTIFY_ENABLED_EVT */
      LOG_INFO_APP("P2P_SERVER_SW_NOTIFY_ENABLED_EVT\r\n");
      /* USER CODE END Service1Char3_NOTIFY_ENABLED_EVT */
      break;

    case P2P_SERVER_SW_NOTIFY_DISABLED_EVT:
      /* USER CODE BEGIN Service1Char3_NOTIFY_DISABLED_EVT */
      LOG_INFO_APP("P2P_SERVER_SW_NOTIFY_DISABLED_EVT\r\n");
      /* USER CODE END Service1Char3_NOTIFY_DISABLED_EVT */
      break;

    default:
      /* USER CODE BEGIN Service1_Notification_default */
      LOG_INFO_APP("P2P_SERVER_Notification FUC\r\n");
      /* USER CODE END Service1_Notification_default */
      break;
  }
  /* USER CODE BEGIN Service1_Notification_2 */

  /* USER CODE END Service1_Notification_2 */
  return;
}

3.2 然后是识别,识别是关键,这里用的是nnom框架,它可以生成C语言的神经网络,不过我这里层数并不多,不然单片机的内存不够用,会Hard Fault 。但是牺牲的是识别的精度,实际用起来其实并不是太好,勉勉强强能识别吧。本来想用LCD显示,奈何内存严重不足,退而求其次,最后只能用点阵显示数字了。

while(1)部分:

if(reg_flag){
      temp_pic1=get_recv_pic_first();
			temp_pic2=get_recv_pic_second();
			//display_pic(temp_pic);
      pre_num=pic_recognition(temp_pic1,temp_pic2);
			display_num(pre_num);
			printf("NN recognition num:%d\r\n",pre_num);
      reg_flag=0;
    }

识别的函数:

uint32_t pic_recognition(uint8_t *custom_pic,uint8_t *custom_pic2){
    
		
    uint32_t pre_label=0;
    float prob;
                    
    // model:mnist nn mod , nnom_output_data:10 classes, get top-1:record num
    //pre = prediction_create(model, nnom_output_data, sizeof(nnom_output_data), 1);
    memcpy(nnom_input_data, custom_pic, 500);
		memcpy(nnom_input_data+500, custom_pic2, 284);

    //this provide more infor but requires prediction API
    //prediction_run(pre, 0, &pre_label, &prob);

    nnom_predict(model, &pre_label, &prob);

    //printf("pre result is %d prob is %f\r\n",pre_label,prob);
    // print prediction result
    //prediction_end(pre);
    //prediction_summary(pre);
    //prediction_delete(pre);

    // model Print running stat
    //model_stat(model);
    return pre_label;
}

模型具体结构:

static nnom_model_t* nnom_model_create(void)
{
	static nnom_model_t model;
	nnom_layer_t* layer[12];

	new_model(&model);

	layer[0] = Input(shape(28, 28, 1), nnom_input_data);
	layer[1] = model.hook(Conv2D(8, kernel(5, 5), stride(1, 1), dilation(1, 1), PADDING_VALID, &conv2d_w, &conv2d_b), layer[0]);
	layer[2] = model.active(act_relu(), layer[1]);
	layer[3] = model.hook(AvgPool(kernel(6, 6), stride(1, 1), PADDING_VALID), layer[2]);
	layer[4] = model.hook(Conv2D(8, kernel(6, 6), stride(1, 1), dilation(1, 1), PADDING_VALID, &conv2d_1_w, &conv2d_1_b), layer[3]);
	layer[5] = model.active(act_relu(), layer[4]);
	layer[6] = model.hook(AvgPool(kernel(7, 7), stride(1, 1), PADDING_VALID), layer[5]);
	layer[7] = model.hook(Dense(32, &dense_w, &dense_b), layer[6]);
	layer[8] = model.active(act_relu(), layer[7]);
	layer[9] = model.hook(Dense(10, &dense_1_w, &dense_1_b), layer[8]);
	layer[10] = model.hook(Softmax(), layer[9]);
	layer[11] = model.hook(Output(shape(10,1,1), nnom_output_data), layer[10]);
	model_compile(&model, layer[0], layer[11]);
	return &model;
}

最后来一张完工的截图:

image.png


共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]
屎壳郎吃什么 什么是夫妻宫 肝郁有什么症状 泮是什么意思 皮肤黄适合穿什么颜色的衣服
欢子真名叫什么 系带割掉了有什么影响 糖链抗原是什么意思 胃一阵一阵的疼是什么原因 易举易泄是什么原因
梦见翻车是什么预兆 什么样子 六点半是什么时辰 7月13日是什么星座 梦见别人吐血是什么预兆
申是什么意思 11月18日是什么星座 拉肚子喝什么饮料 五月二十三日是什么星座 抽象是什么意思
龙和什么属相最配dayuxmw.com 湿疣是什么病hcv8jop1ns6r.cn 55年属什么sscsqa.com 什么是有氧运动什么是无氧运动hebeidezhi.com 口炎读什么gysmod.com
roma是什么牌子hcv7jop9ns0r.cn 什么节气hcv8jop0ns0r.cn 髻是什么意思hcv7jop7ns0r.cn 钅读什么偏旁hcv7jop9ns7r.cn 开什么店好赚钱hcv8jop7ns4r.cn
兔死狗烹什么意思hcv9jop8ns0r.cn 3什么意思xjhesheng.com 智齿是什么原因引起的hcv8jop2ns4r.cn 佑五行属什么hcv8jop7ns7r.cn 什么是静息心率xianpinbao.com
勃而不坚吃什么药hcv8jop8ns4r.cn 痿是什么意思hcv9jop1ns0r.cn 甲泼尼龙是什么药hcv7jop6ns3r.cn hda是什么hcv9jop5ns3r.cn 什么情况下能吃脑络通hcv9jop2ns9r.cn
百度