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

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` 显式导入。  

相关文章:

  • 多物理场仿真底层算法到AI智能仿真革命
  • Win11右键显示全部内容
  • 架构-软件架构设计
  • Windows下QT打包后程序运行后弹出CMD命令窗口的问题解决方法
  • 某大型电解铝厂电解系统谐波治理装置改造沃伦森电气
  • 深度学习3.7 softmax回归的简洁实现
  • 基于大模型的食管平滑肌瘤全周期预测与诊疗方案研究
  • Kaamel白皮书:Model Context Protocol (MCP) 隐私安全最佳实践
  • 沁恒CHV203中断嵌套导致修改线程栈-韦东山
  • 什么是IT人力外包?IT人力外包服务流程分为哪些步骤?
  • 序论文42 | patch+MLP用于长序列预测
  • Python基础语法:标识符,运算符,数据输入input(),数据输出print(),转义字符,续行符
  • CompletableFuture到底怎么用?
  • 飞算 JavaAI 的 “需求变更” 解决方案:让开发更灵活!
  • 如何解决PyQt从主窗口打开新窗口时出现闪退的问题
  • ai人才需要掌握什么
  • linux 桌面环境
  • JCE cannot authenticate the provider BC
  • 三国杀专业分析面板,立志成为桌游界的stockfish
  • Git多人协作与企业级开发模型
  • 魔都眼丨人形机器人“华山论剑”:拳击赛缺席,足球赛抢镜
  • 从篆刻书画到装帧设计,再看钱君匋的“艺兼众美”
  • 冯象|那“交出”后的崩溃,如撒旦坠落诸天
  • 2025年度人大立法工作计划将公布:研究启动法律清理工作
  • 王宝强谈《棋士》:饰演这个灰度人物有一种被割裂的痛苦
  • 中国天主教组织发唁电对教皇去世表示哀悼