ImgToConv2dBin.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import re
  2. import time
  3. import cv2
  4. import numpy as np
  5. import random
  6. import struct
  7. preamble = 0xE1E4C312
  8. moduleId = 0x4cd2e19c
  9. jobId = 0x12345678
  10. size = 224
  11. kernelSize = 5
  12. border = int(kernelSize/2)
  13. sizeWithBorder = size+2*border
  14. pixels = sizeWithBorder**2
  15. image = cv2.imread("Test_card.png")
  16. image = cv2.resize(image, (size, size))
  17. image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
  18. image = cv2.copyMakeBorder(image, border, border, border, border, cv2.BORDER_REPLICATE)
  19. kernel = [
  20. 1, 4, 6, 4, 1,
  21. 4, 16, 24, 16, 4,
  22. 6, 24, 36, 24, 6,
  23. 4, 16, 24, 16, 4,
  24. 1, 4, 6, 4, 1
  25. ]
  26. cs = moduleId + jobId + np.sum(image) + np.sum(kernel)
  27. delay = 0
  28. with open("vivado_project/vhdl-modules.sim/sim_1/behav/xsim/input.txt", "w") as inFile:
  29. inFile.write("{:d} ns {:032b}\n".format(delay, preamble))
  30. inFile.write("{:d} ns {:032b}\n".format(delay, jobId))
  31. inFile.write("{:d} ns {:032b}\n".format(delay, moduleId))
  32. for i in range(kernelSize**2):
  33. val = struct.unpack('!i',struct.pack('!f', kernel[i] / 256))[0]
  34. inFile.write("{:d} ns {:032b}\n".format(delay, val))
  35. cs += val
  36. for i in range(pixels):
  37. y, x = int(i / sizeWithBorder), i % sizeWithBorder
  38. val = struct.unpack('!i',struct.pack('!f', image[y][x]))[0]
  39. inFile.write("{:d} ns {:032b}\n".format(delay, val))
  40. cs += val
  41. csc = 2**32 - cs % (2**32)
  42. if csc == 2**32:
  43. csc = 0
  44. inFile.write("{:d} ns {:032b}\n".format(delay, int(csc)))
  45. with open("vivado_project/vhdl-modules.sim/sim_1/behav/xsim/outputTimings.txt", "w") as inFile:
  46. for i in range(4 + pixels):
  47. inFile.write("{:d} ns\n".format(315))