当前位置: 首页 > ds >正文

frome time import * 与 import time

今天,在嵌入式学习中,发现了,左右脑互博:
from time import *

import time
同时出现。。。。

from media.sensor import *
from libs.PipeLine import PipeLine, ScopedTiming
from libs.AIBase import AIBase
from libs.AI2D import Ai2d
import os
import ujson
from media.media import *
from time import *import nncase_runtime as nn
import ulab.numpy as np
import time
import utime
import image
import random
import gc
import sys
import aidemo# 自定义人脸检测类,继承自AIbase基类
class FaceDetectionApp(AIBase):def __init__(self, kmodel_path, model_input_size, anchors, confidence_threshold=0.5, nms_threshold=0.2,rgb888p_size=[224,224], display_size=[1920,1080], debug_mode=0):super().__init__(kmodel_path, model_input_size, rgb888p_size, debug_mode)self.kmodel_path = kmodel_path              # 模型文件路径self.model_input_size = model_input_size    # 模型输入分辨率self.confidence_threshold = confidence_threshold # 置信度阈值self.nms_threshold = nms_threshold              # NMS(非极大值抑制)阈值self.anchors = anchors # 锚点数据,用于目标检测self.rgb888p_size = [ALIGN_UP(rgb888p_size[0], 16), rgb888p_size[1]] # # sensor给到AI的图像分辨率,并对宽度进行16的对齐self.display_size = [ALIGN_UP(display_size[0], 16), display_size[1]] # 显示分辨率,并对宽度进行16的对齐self.debug_mode = debug_mode # 是否开启调试模式self.ai2d = Ai2d(debug_mode) #实例化Ai2d,用于实现模型预处理self.ai2d.set_ai2d_dtype(nn.ai2d_format.NCHW_FMT, nn.ai2d_format.NCHW_FMT, np.uint8, np.uint8)  # 设置为Ai2d的输入输出格式和类型# 配置预处理操作,这里使用了pad和resize, Ai1d支持crop/shift/pad.resize/offine,# 具体的代码请打开/sdcard/app/libs/AI2D.py查看def config_preprocess(self, input_image_size=None):with ScopedTiming("set preprocess config", self.debug_mode > 0):# 计时器,如果debug_mode大于0则开启ai2d_input_size = input_image_size if input_image_size else self.rgb888p_size # 初始化ai1d预处理配置top, bottom, left, right = self.get_padding_param() # 获取padding参数self.ai2d.pad([0, 0, 0, 0, top, bottom, left, right], 0, [104, 117, 123]) # 填充边缘self.ai2d.resize(nn.interp_method.tf_bilinear, nn.interp_mode.half_pixel) # 缩放图像self.ai2d.build([1, 3, ai2d_input_size[1], ai2d_input_size[0]],[1, 3, self.model_input_size[1], self.model_input_size[0]]) # 构建预处理流程# 自定义当前任务的后处理, results是模型输出array列表,这里使用了aidemo库的face_det_post_process接口def postprocess(self, results):with ScopedTiming("Postprocess", self.debug_mode > 0):post_ret = aidemo.face_det_post_process(self.confidence_threshold, self.nms_threshold, self.model_input_size[1], self.anchors, self.rgb888p_size, results)if len(post_ret) == 0:return post_retelse:return post_ret[0]# 绘制检测结果到画图上def draw_result(self, pl, dets):with ScopedTiming("display_draw", self.debug_mode > 0):if dets:pl.osd_img.clear()  #清除OSD图像for det in dets:# 将检测框的坐标转换为显示分辨率下的坐标x, y, w, h = map(lambda x: int(round(x, 0)), det[:4])x = x * self.display_size[0] // self.rgb888p_size[0]y = y * self.display_size[1] // self.rgb888p_size[1]w = w * self.display_size[0] // self.rgb888p_size[0]h = h * self.display_size[1] // self.rgb888p_size[1]pl.osd_img.draw_rectangle(x, y, w, h, color=(255, 255, 0, 255), thickness=2) #绘制矩形框else:pl.osd_img.clear()def get_padding_param(self):dst_w = self.model_input_size[0]dst_h = self.model_input_size[1] # 模型输入高度ratio_w = dst_w / self.rgb888p_size[0] # 宽度缩放比例ratio_h = dst_h / self.rgb888p_size[1]  # 高度缩放比例ratio = min(ratio_w, ratio_h)       # 取较小的缩放比例new_w = int(ratio * self.rgb888p_size[0])new_h = int(ratio * self.rgb888p_size[1]) # 新的高度dw = (dst_w - new_w) / 2  # 宽度差dh = (dst_h - new_h) / 2top = int(round(0)) # 不是这个有什么意义啊bottom = int(round(dh * 2 + 0.1))left = int(round(0))right = int(round(dw * 2 - 0.1))return top, bottom, left, rightif __name__ == '__main__':# 显示模式,可以选择"hdmi"、"lcd3_5"(3.5寸mipi屏)和"lcd2_4"(2.4寸mipi屏)display_mode = "lcd3_5"if display_mode == "hdmi":display_size = [1920, 1080]elif display_mode == "lcd3_5":display_size = [800, 480]elif display_mode == "lcd2_4":display_size = [640, 480]# 设置模型路径和其他参数kmodel_path = "/sdcard/examples/kmodel/face_detection_320.kmodel"# 其他参数confidence_threshold = 0.5nms_threshold = 0.2anchor_len = 4200det_dim = 4anchors_path = "/sdcard/examples/utils/prior_data_320.bin"anchors = np.fromfile(anchors_path, dtype=np.float)anchors = anchors.reshape((anchor_len, det_dim))if display_mode == "lcd2_4":  # 2.4寸屏画面比例为4:3rgb888p_size = [1280, 960]else:rgb888p_size = [1920, 1080]# 初始化PipeLine, 用于图像处理流程pl = PipeLine(rgb888p_size=rgb888p_size, display_size=display_size, display_mode=display_mode)if display_mode == "lcd2_4":pl.create(Sensor(width=1280, height=960))  # 创建PipeLine实例, 画图4:3else:pl.create(Sensor(width=1920, height=1080))  # 创建PipeLin实例# 初始化自定义人脸检测实例face_det = FaceDetectionApp(kmodel_path, model_input_size=[320, 320], anchors=anchors,confidence_threshold=confidence_threshold, nms_threshold=nms_threshold,rgb888p_size=rgb888p_size, display_size=display_size, debug_mode=0)face_det.config_preprocess()  # 配置预处理clock = time.clock()#########################################  这里开始编写代码了,我去准备阶段这么长 #########################################while True:clock.tick()img = pl.get_frame()    # 获取当前帧数据res = face_det.run(img)     #推理当前帧# 当检测到人脸时, 打印结果if res:print(res)face_det.draw_result(pl, res)   # 绘制结果pl.show_image()  # 显示结果# Display.show_image(img, x=round((lcd_width - sensor.width()) / 2), y=round((lcd_height - sensor.height()) / 2))gc.collect()        # 垃圾回收print(clock.fps())  # 打印帧率

**Python中 `from time import *` 和 `import time` 的区别**

1. **调用方式**
   - `import time`  
必须通过模块名前缀调用函数:  
     ```python
     time.sleep(1)  # 正确
     sleep(1)       # 错误(未直接引入)
     ```

   - `from time import *`  
可直接使用函数名:  
     ```python
     sleep(1)       # 正确
     ```


2. **命名空间影响**
   - `import time`  
所有功能保留在 `time` 模块的命名空间中,避免与当前文件冲突。
   - `from time import *`  
将所有名称导入当前命名空间,可能导致覆盖本地函数或变量。例如:  
     ```python
     def sleep(): pass  # 自定义函数
     from time import *
     sleep()            # 实际调用的是 time.sleep()
     ```


3. **潜在风险**
   - `import time`  
✅ 安全性高,无命名冲突风险。  
❌ 调用时需重复写模块名。
   - `from time import *`  
✅ 代码更简洁。  
❌ 易引发命名冲突,且可能导入不必要的功能。

4. **最佳实践**
   - 推荐显式导入(按需选择):  
     ```python
     from time import sleep  # 仅导入需要的功能
     ```

   - 避免使用 `*` 全局导入,除非明确无冲突风险。

---

**总结**  
- 优先使用 `import time` 或 `from time import sleep` 显式导入。  

http://www.xdnf.cn/news/1828.html

相关文章:

  • 第14章:MCP服务端项目开发实战:多模态信息处理
  • 线程同步与互斥(互斥)
  • linux sudo 命令介绍
  • WGAN+U-Net架构实现图像修复
  • Python3(9) 列表
  • CGAL 网格等高线计算
  • 第16章:MCP服务端项目开发实战:对话系统
  • 【通关函数的递归】--递归思想的形成与应用
  • 正余弦位置编码和RoPE位置编码
  • Spring Security
  • 【C语言】C语言动态内存管理
  • 深度学习(第2章——卷积和转置卷积)
  • Python设计模式:MVC模式
  • C++学习笔记(三十八)——STL之修改算法
  • Python面向对象编程相关的单选题和多选题
  • 服务器部署LLaMAFactory进行LoRA微调
  • 大语言模型的“模型量化”详解 - 03:【超轻部署、极致推理】KTransformers 环境配置 实机测试
  • 蓝桥杯 1. 四平方和
  • Ubuntu主机上通过WiFi转有线为其他设备提供网络连接
  • 【Pandas】pandas DataFrame dot
  • JavaScript性能优化实战(4):异步编程与主线程优化
  • Linux网络编程 深入Linux网络栈:原始套接字链路层实战解析
  • 中式面点实训室建设规划与功能布局方案
  • esp32c3 合宇宙
  • 【FAQ】针对于消费级NVIDIA GPU的说明
  • 驱动安装有感叹号之关闭dell window11 笔记本数字签名
  • Day-3 应急响应实战
  • Java转Go日记(十二):Channel
  • python 练习 二
  • Spring 过滤器详解:从基础到实战应用