cam.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import sensor, image, time, math
  2. from pyb import Pin
  3. threshold_list = [(190, 255)]
  4. min_temp_in_celsius = 20.0
  5. max_temp_in_celsius = 40.0
  6. pin1 = Pin('P4', Pin.OUT_PP, Pin.PULL_NONE)
  7. sensor.reset()
  8. sensor.ioctl(sensor.IOCTL_LEPTON_SET_MODE, True, True)
  9. sensor.ioctl(sensor.IOCTL_LEPTON_SET_RANGE, min_temp_in_celsius, max_temp_in_celsius)
  10. sensor.ioctl(sensor.IOCTL_LEPTON_GET_WIDTH)
  11. sensor.ioctl(sensor.IOCTL_LEPTON_GET_HEIGHT)
  12. sensor.ioctl(sensor.IOCTL_LEPTON_GET_RADIOMETRY)
  13. sensor.set_pixformat(sensor.GRAYSCALE)
  14. sensor.set_framesize(sensor.QQVGA)
  15. sensor.skip_frames(time=5000)
  16. clock = time.clock()
  17. def map_g_to_temp(g):
  18. return ((g * (max_temp_in_celsius - min_temp_in_celsius)) / 255.0) + min_temp_in_celsius
  19. while(True):
  20. clock.tick()
  21. img = sensor.snapshot()
  22. blob_stats = []
  23. blobs = img.find_blobs(threshold_list, pixels_threshold=200, area_threshold=200, merge=True)
  24. # Collect stats into a list of tuples
  25. for blob in blobs:
  26. blob_stats.append((blob.x(), blob.y(), map_g_to_temp(img.get_statistics(thresholds=threshold_list,
  27. roi=blob.rect()).mean())))
  28. img.to_rainbow(color_palette=image.PALETTE_IRONBOW) # color it
  29. for blob in blobs:
  30. img.draw_rectangle(blob.rect(), color=(0,255,0))
  31. img.draw_cross(blob.cx(), blob.cy(), color=(0,255,0))
  32. for blob_stat in blob_stats:
  33. if blob_stat[2] > 38.0:
  34. pin1.value(1)
  35. img.draw_string(blob_stat[0] + 2, blob_stat[1] + 1, "%.2f C" % blob_stat[2], mono_space=False, color=(0,255,0))
  36. if not blob_stats:
  37. pin1.value(0)