小言_互联网的博客

python人脸头发身体部位识别人数统计

313人阅读  评论(0)

python人脸头发身体部位识别人数统计

如需安装运行环境或远程调试,可加QQ905733049, 或QQ2945218359由专业技术人员远程协助!

运行结果如下:

代码如下:


  
  1. import time
  2. from pathlib import Path
  3. import cv2
  4. import torch
  5. from numpy import random
  6. from models.experimental import attempt_load
  7. from utils.datasets import LoadStreams, LoadImages
  8. from utils.general import check_img_size, check_requirements, check_imshow, non_max_suppression, apply_classifier, \
  9. scale_coords, xyxy2xywh, strip_optimizer, set_logging, increment_path
  10. from utils.plots import plot_one_box
  11. from utils.torch_utils import select_device, load_classifier, time_synchronized
  12. def detect(save_img=False):
  13. source, weights, view_img, save_txt, imgsz = opt.source, opt.weights, opt.view_img, opt.save_txt, opt.img_size
  14. webcam = source.isnumeric() or source.endswith( '.txt') or source.lower().startswith(
  15. ( 'rtsp://', 'rtmp://', 'http://'))
  16. # Directories
  17. save_dir = Path(increment_path(Path(opt.project) / opt.name, exist_ok=opt.exist_ok)) # increment run
  18. (save_dir / 'labels' if save_txt else save_dir).mkdir(parents= True, exist_ok= True) # make dir
  19. # Initialize
  20. set_logging()
  21. device = select_device(opt.device)
  22. half = device.type != 'cpu' # half precision only supported on CUDA
  23. # Load model
  24. model = attempt_load(weights, map_location=device) # load FP32 model
  25. stride = int(model.stride.max()) # model stride
  26. imgsz = check_img_size(imgsz, s=stride) # check img_size
  27. if half:
  28. model.half() # to FP16
  29. # Second-stage classifier
  30. classify = False
  31. if classify:
  32. modelc = load_classifier(name= 'resnet101', n= 2) # initialize
  33. modelc.load_state_dict(torch.load( 'weights/resnet101.pt', map_location=device)[ 'model']).to(device).eval()
  34. # Set Dataloader
  35. vid_path, vid_writer = None, None
  36. if webcam:
  37. view_img = check_imshow()
  38. cudnn.benchmark = True # set True to speed up constant image size inference
  39. dataset = LoadStreams(source, img_size=imgsz, stride=stride)
  40. else:
  41. save_img = True
  42. dataset = LoadImages(source, img_size=imgsz, stride=stride)
  43. # Get names and colors
  44. names = model.module.names if hasattr(model, 'module') else model.names
  45. colors = [[random.randint( 0, 255) for _ in range( 3)] for _ in names]
  46. # Run inference
  47. if device.type != 'cpu':
  48. model(torch.zeros( 1, 3, imgsz, imgsz).to(device).type_as(next(model.parameters()))) # run once
  49. t0 = time.time()
  50. for path, img, im0s, vid_cap in dataset:
  51. img = torch.from_numpy(img).to(device)
  52. img = img.half() if half else img.float() # uint8 to fp16/32
  53. img /= 255.0 # 0 - 255 to 0.0 - 1.0
  54. if img.ndimension() == 3:
  55. img = img.unsqueeze( 0)
  56. # Inference
  57. t1 = time_synchronized()
  58. pred = model(img, augment=opt.augment)[ 0]
  59. # Apply NMS
  60. pred = non_max_suppression(pred, opt.conf_thres, opt.iou_thres, classes=opt.classes, agnostic=opt.agnostic_nms)
  61. t2 = time_synchronized()
  62. # Apply Classifier
  63. if classify:
  64. pred = apply_classifier(pred, modelc, img, im0s)
  65. # Process detections
  66. for i, det in enumerate(pred): # detections per image
  67. if webcam: # batch_size >= 1
  68. p, s, im0, frame = path[i], '%g: ' % i, im0s[i].copy(), dataset.count
  69. else:
  70. p, s, im0, frame = path, '', im0s, getattr(dataset, 'frame', 0)
  71. p = Path(p) # to Path
  72. save_path = str(save_dir / p.name) # img.jpg
  73. txt_path = str(save_dir / 'labels' / p.stem) + ( '' if dataset.mode == 'image' else f'_{frame}') # img.txt
  74. s += '%gx%g ' % img.shape[ 2:] # print string
  75. gn = torch.tensor(im0.shape)[[ 1, 0, 1, 0]] # normalization gain whwh
  76. if len(det):
  77. # Rescale boxes from img_size to im0 size
  78. det[:, : 4] = scale_coords(img.shape[ 2:], det[:, : 4], im0.shape).round()
  79. # Write results
  80. for *xyxy, conf, cls in reversed(det):
  81. if save_txt: # Write to file
  82. xywh = (xyxy2xywh(torch.tensor(xyxy).view( 1, 4)) / gn).view( -1).tolist() # normalized xywh
  83. line = (cls, *xywh, conf) if opt.save_conf else (cls, *xywh) # label format
  84. with open(txt_path + '.txt', 'a') as f:
  85. f.write(( '%g ' * len(line)).rstrip() % line + '\n')
  86. if save_img or view_img: # Add bbox to image
  87. label = f'{names[int(cls)]} {conf:.2f}'
  88. plot_one_box(xyxy, im0, label=label, color=colors[int(cls)], line_thickness= 3)
  89. # Print time (inference + NMS)
  90. print( f'{s}Done. ({t2 - t1:.3f}s)')
  91. # Save results (image with detections)
  92. if save_img:
  93. if dataset.mode == 'image':
  94. cv2.imwrite(save_path, im0)
  95. else: # 'video'
  96. if vid_path != save_path: # new video
  97. vid_path = save_path
  98. if isinstance(vid_writer, cv2.VideoWriter):
  99. vid_writer.release() # release previous video writer
  100. fourcc = 'mp4v' # output video codec
  101. fps = vid_cap.get(cv2.CAP_PROP_FPS)
  102. w = int(vid_cap.get(cv2.CAP_PROP_FRAME_WIDTH))
  103. h = int(vid_cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
  104. vid_writer = cv2.VideoWriter(save_path, cv2.VideoWriter_fourcc(*fourcc), fps, (w, h))
  105. vid_writer.write(im0)
  106. if save_txt or save_img:
  107. s = f"\n{len(list(save_dir.glob('labels/*.txt')))} labels saved to {save_dir / 'labels'}" if save_txt else ''
  108. print( f"Results saved to {save_dir}{s}")
  109. print( f'Done. ({time.time() - t0:.3f}s)')
  110. print(opt)
  111. check_requirements()
  112. with torch.no_grad():
  113. if opt.update: # update all models (to fix SourceChangeWarning)
  114. for opt.weights in [ 'yolov5s.pt', 'yolov5m.pt', 'yolov5l.pt', 'yolov5x.pt']:
  115. detect()
  116. strip_optimizer(opt.weights)
  117. else:
  118. detect()

运行结果如下:

 

ython, C++, PHP语言学习参考实例连接

C++学习参考实例

C++实现图形界面五子棋游戏源码:

https://blog.csdn.net/alicema1111/article/details/90035420

C++实现图形界面五子棋游戏源码2:

https://blog.csdn.net/alicema1111/article/details/106479579

C++ OpenCV相片视频人脸识别统计人数:

https://blog.csdn.net/alicema1111/article/details/105833928

VS2017+PCL开发环境配置:

https://blog.csdn.net/alicema1111/article/details/106877145

VS2017+Qt+PCL点云开发环境配置:

https://blog.csdn.net/alicema1111/article/details/105433636

C++ OpenCV汽车检测障碍物与测距:

https://blog.csdn.net/alicema1111/article/details/105833449

Windows VS2017安装配置PCL点云库:

https://blog.csdn.net/alicema1111/article/details/105111110

 

Python学习参考实例

Python相片更换背景颜色qt窗体程序:

https://blog.csdn.net/alicema1111/article/details/106919140

OpenCV汽车识别检测数量统计:

https://blog.csdn.net/alicema1111/article/details/106597260

OpenCV视频识别检测人数跟踪统计:

https://blog.csdn.net/alicema1111/article/details/106113042

OpenCV米粒检测数量统计:

https://blog.csdn.net/alicema1111/article/details/106089697

opencv人脸识别与变形哈哈镜:

https://blog.csdn.net/alicema1111/article/details/105833123

OpenCV人脸检测打卡系统:

https://blog.csdn.net/alicema1111/article/details/105315066

Python+OpenCV摄像头人脸识别:

https://blog.csdn.net/alicema1111/article/details/105107286

Python+Opencv识别视频统计人数:

https://blog.csdn.net/alicema1111/article/details/103804032

Python+OpenCV图像人脸识别人数统计

https://blog.csdn.net/alicema1111/article/details/105378639


转载:https://blog.csdn.net/alicema1111/article/details/116424942
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场