02人工智能创新型教师培育计划(第一期)0126

                
 

人工智能创新型教师培育计划(第一期)

活动更新(1月24日 15:00更新):

感谢各位老师对本次活动的关注与支持,线上课程即将开始,请各位已报名老师注意以下事项:

1. 直播时间:

 

  • 1月25日 19:30—21:00

 

 

  • 1月26日 19:30—21:00

 

2. 直播内容:

 

  • 课题:大模型赋能3小时入门Python

 

 

  • 教师:谢作如(浙江省特级教师)
 

 xedu 安装使用

 

1. 管理员安装

 

2. 解压根目录  xedu文件夹

 

 3. 运行 bug修复

 

 

4. 执行自己习惯的编程 模式。

三选一 

 

5. Jupyter编辑器.bat 启动

 

保留 服务窗口

 浏览器 chrome 编程页面

 

编程页面。

 

 

 

 

 02课内容

2025年1月26日 星期日

 

  

 知识点回顾;

1. 什么是编程。 

 程序,或者提示词避免歧义。

 

2. 解释性语言和编译形语言

 

xedu集成环境

 

 

 

错误解决

 

路径设置问题,属于软件使用问题。

 

 

 版本冲突问题。

 

python基础

 变量,引号。

 

切片

 

考试

 

大模型解答复杂问题。

 

2023年中小学教师人工智能评比考试

 

 

优质教师同等评级。

人工智能与硬件无关。

 

 

默认情况下,分类模型的推理结果返回的是列表,内容是每一个类别的概率(总和为1)。
比一个10分类的AI模型返回的推理结果是
“[0.01,0.01,0.01,0.01,0.70,0.21,0.02,0.01,0.01,0.01]”
女口表示第4类(序号从0开始)的概率最大,置信度(也称可靠度或者置信系数)是0.70,
其次是第5类,置信度是0.21。 函数topk"能够对推理结果进行处理,输出率最大的前n类的。参数"list in"为推理结果,
n为要返回的类别数量。以上面的数据为例,如果n的值是3,那么返回的数据如下: {0: [4,0.70].1: [5,0.21].2: [6, 0.02]} 即返回的数据为有3组元素的字典,键名为"0"的是概率最大的类别,
键值为由类别序号和置信度组成的列表,即“[4,0.7]"。

浦育平台 - 搜索项目

 

https://www.openinnolab.org.cn/pjedu/home

 

项目克隆、;

 

 https://www.openinnolab.org.cn/pjlab/project?id=679629837ba31558ee89bedb&backpath=/pjlab/projects/list

 

 

 

1)下载最新版本 XEdu 一键安装包(v1.6.7f), 建议安装在“D:/”, 具体检查要求见附录 (XEdu 环境)。

下载地址:https://p6bm2if73b.feishu.cn/file/boxcn7ejYk2XUDsHI3Miq9546Uf

2)下载最新版本的 Mind+,并安装 XEduHub 和 Flask 插件, 具体检查要求见附录 (Mind+环境)。

Mind+下载地址:https://mindplus.cc/download.html

XEduHub 插件地址:https://gitee.com/liliang9693/ext-xedu-hub

二、答题

根据试题和教程完成(项目文件提供试题、参考答案、参考教程)

注:综合题请在本地完成,数据集见项目文件,任务一:auto-mpg.csv,任务二:wqx3_imagenet.zip

 

 

生成结果

 

 

 

默认情况下,分类模型的推理结果返回的是列表,内容是每一个类别的概率(总和为1)。比如,一个10分类的AI模型返回的推理结果是
“[0.01,0.01,0.01,0.01,0.70,0.21,0.02.0.01,0.01,0.01]”,表示第4类(序号从0开始)的率最大,信度(也称可度或者置信系数)是0.70,其次是第5类,置信度是0.21。函致“top_k”能够对推理结果进行处理,输出概率最大的前n类的。

 

import numpy as np

def top_k(result, k):
    """
    返回概率最大的前 k 类的索引和概率。
    
    参数:
    result (list): 分类模型的推理结果,每个元素表示一个类别的概率。
    k (int): 要返回的类别数量。
    
    返回:
    top_indices (list): 概率最大的前 k 类的索引。
    top_probabilities (list): 这些类别的概率。
    """
    # 将结果转换为 NumPy 数组
    result_array = np.array(result)
    
    # 获取概率最大的前 k 个索引
    top_indices = np.argsort(result_array)[-k:][::-1]
    
    # 获取对应的概率
    top_probabilities = result_array[top_indices]
    
    return top_indices, top_probabilities

from XEdu.hub import Workflow as wf # 导入库

# 实例化模型
model = wf(task='cls_imagenet')

# 指定进行推理的图片路径
img_path = 'demo/cat.jpg'

# 进行推理
result = model.inference(data=img_path)

# 打印结果
# print("推理结果:", result)
print("结果类型:", type(result))
print("结果长度:", len(result))

# 如果 result 是一个二维数组,提取第一行
if len(result.shape) > 1 and result.shape[0] == 1:
    result = result[0]

# 打印提取后的结果
# print("提取后的推理结果:", result)
print("提取后的结果类型:", type(result))
print("提取后的结果长度:", len(result))

# 使用 top_k 函数获取概率最大的类别及其概率
k = 1
top_indices, top_probabilities = top_k(result, k)

# 打印最大值
print(f"概率最大的类别索引: {top_indices[0]}")
print(f"概率最大的类别概率: {top_probabilities[0]}")

  

 

 

 

from XEdu.hub import Workflow as wf # 导入库
cls = wf(task='cls_imagenet') # 实例化模型
img_path = 'demo/cat.jpg' # 指定进行推理的图片路径
cls.inference(data=img_path) # 进行推理
cls_format_result = cls.format_output(lang="zh")  # 结果格式化输出

 

模型加载成功!
{'预测值': 281, '分数': 0.59826237, '预测类别': 'tabby, tabby cat'}

 

 

提示词;

from XEdu.hub import Workflow as wf # 导入库 cls = wf(task='cls_imagenet') # 实例化模型 img_path = 'demo/cat.jpg' # 指定进行推理的图片路径 cls.inference(data=img_path) # 进行推理 cls_format_result = cls.format_output(lang="zh") # 结果格式化输出 这个程序就完成了图片推理, 并输出了推理结果。 模型加载成功! {'预测值': 281, '分数': 0.59826237, '预测类别': 'tabby, tabby cat'} 结合这个功能,可以帮我写个python的 应用界面程序吗。

 

我们可以使用 tkinter 库来创建一个简单的图形用户界面(GUI)应用程序,让用户可以轻松地选择图片并查看推理结果。以下是一个完整的示例代码:

完整代码

Python复制
import tkinter as tk
from tkinter import filedialog
from XEdu.hub import Workflow as wf

# 实例化模型
cls = wf(task='cls_imagenet')

# 定义函数来处理图片推理
def process_image():
    # 打开文件选择对话框
    img_path = filedialog.askopenfilename(title="选择图片", filetypes=[("Image files", "*.jpg *.jpeg *.png")])
    if not img_path:
        return  # 如果用户取消选择,直接返回

    # 进行推理
    result = cls.inference(data=img_path)
    cls_format_result = cls.format_output(lang="zh")

    # 更新结果显示
    result_text.set(f"预测值: {cls_format_result['预测值']}\n分数: {cls_format_result['分数']:.6f}\n预测类别: {cls_format_result['预测类别']}")

# 创建主窗口
root = tk.Tk()
root.title("图片分类器")

# 创建一个标签来显示结果
result_text = tk.StringVar()
result_label = tk.Label(root, textvariable=result_text, justify=tk.LEFT, wraplength=400)
result_label.pack(pady=20)

# 创建一个按钮来选择图片并处理
process_button = tk.Button(root, text="选择图片并推理", command=process_image)
process_button.pack(pady=10)

# 运行主循环
root.mainloop()

代码说明

  1. 导入必要的库:
    • tkinter 用于创建图形用户界面。
    • filedialog 用于打开文件选择对话框。
    • XEdu.hub 用于加载和使用分类模型。
  2. 实例化模型:
    • 使用 wf(task='cls_imagenet') 实例化分类模型。
  3. 定义 process_image 函数:
    • 打开文件选择对话框,让用户选择图片。
    • 调用模型的 inference 方法进行推理。
    • 调用 format_output 方法格式化输出结果。
    • 更新结果显示在标签中。
  4. 创建主窗口:
    • 创建一个 tk.Tk 对象作为主窗口。
    • 设置窗口标题为 "图片分类器"。
  5. 创建结果显示标签:
    • 使用 tk.StringVar 来动态更新结果显示。
    • 创建一个 tk.Label 来显示结果。
  6. 创建按钮:
    • 创建一个按钮,点击时调用 process_image 函数。
  7. 运行主循环:
    • 调用 root.mainloop() 启动应用程序的主循环。

运行程序

将上述代码保存为一个 Python 文件(例如 image_classifier_gui.py),然后运行该文件。程序将启动一个图形用户界面,用户可以通过点击按钮选择图片并查看推理结果。

示例运行

  1. 启动程序后,界面如下所示:
    图片分类器
  2. 点击 "选择图片并推理" 按钮,选择一张图片(例如 demo/cat.jpg)。
  3. 程序将显示推理结果,例如:
    复制
    预测值: 281
    分数: 0.598262
    预测类别: tabby, tabby cat

 

提示词

 

可以同时把选择的图片,展示在 界面上吗。
 
 

 

 

 

 

 

 

 

 

 添加摄像头识别,实时吃输出结果。

 

要实现从摄像头实时获取图像并进行实时检测,同时输出“预测类别",你可以借助Python的 0penCV 库来捕获摄像头的视频流,然后循环读取每一帧图像,将其传入 XEduHub 的模型进行推理,并输出预测类别。以下是修改后的代码示例:

 

 

 

 

 

import cv2
from XEdu.hub import Workflow as wf

# 实例化模型
cls = wf(task='cls_imagenet')

# 打开摄像头
cap = cv2.VideoCapture(0)

# 检查摄像头是否成功打开
if not cap.isOpened():
    print("无法打开摄像头")
    exit()

# 循环读取每一帧图像
while True:
    # 读取一帧
    ret, frame = cap.read()
    
    # 如果正确读取帧,ret为True
    if not ret:
        print("无法读取帧")
        break
    
    # 将帧图像转换为模型需要的格式
    # 假设模型需要224x224的图像
    resized_frame = cv2.resize(frame, (224, 224))
    
    # 进行推理
    result = cls.inference(data=resized_frame)
    cls_format_result = cls.format_output(lang="zh")
    
    # 在图像上显示预测类别
    cv2.putText(frame, f"预测类别: {cls_format_result['预测类别']}", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
    
    # 显示图像
    cv2.imshow('frame', frame)
    
    # 按下 'q' 键退出
    if cv2.waitKey(1) == ord('q'):
        break

# 释放摄像头资源
cap.release()
# 关闭所有OpenCV窗口
cv2.destroyAllWindows()

  

 

 

 

 

 

 

 

考题,模型运行输出结果如下,

 

提取出来坐标。

把对应位置的矩形框 绘制出来。

 

 

 

 

 

 

 

 

总结;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 xedu路径的设置

https://www.openinnolab.org.cn/pjedu/teach?mode=learn&courseId=6389aad6570167175c7300a8&scheduleId=6389c007caf1801dde9883fb&classId=null&documentId=6389b11a67cc8f3dee6c0498&from=courseDetail

 

 

 

当前文件的位置。。 

 同目录创建   demo 文件夹

 

demo中确保  有需要的 文件 

 图片路径

img_path = 'demo/cat.jpg' # 指定进行推理的图片路径

img_path = 'demo/cat.jpg' # 指定进行推理的图片路径

  

 

 

 

 

 

 

 

 

 

   
   
   

考题,模型运行输出结果如下,

 

提取出来坐标。

把对应位置的矩形框 绘制出来。

 

 

 

 

 

 

   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
posted @ 2025-01-26 21:12  aiplus  阅读(149)  评论(0)    收藏  举报
悬浮按钮示例