gamma-tools.py 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. # -*- coding: UTF-8 -*-
  2. import time
  3. import re # 正则表达式;
  4. import numpy as np
  5. import zipfile
  6. import gzip
  7. import autoGamma
  8. from mokaSerail import MokaSerial
  9. from caSerail import CASerail
  10. def readPartern():
  11. f = open(u"cfg.txt") # 返回一个文件对象
  12. line = f.readline() # 调用文件的 readline()方法,一次读取一行
  13. print(u"第一行", line)
  14. line = line.replace("\r", "")
  15. line = line.replace('\n', '')
  16. TV_COM = line.split(",")[0]
  17. CA_COM = line.split(",")[1]
  18. print("value", TV_COM, CA_COM)
  19. PAR_LIST = []
  20. while line:
  21. print(line)
  22. line = f.readline()
  23. if line.__len__() != 0:
  24. line = line.replace("\r", "")
  25. line = line.replace('\n', '')
  26. ls_d = line.split(',')
  27. # PAR_LIST.append(line.split(','))
  28. PAR_LIST.append([int(ls_d[0]), int(ls_d[1]), int(ls_d[2])])
  29. f.close()
  30. print(PAR_LIST)
  31. return TV_COM, CA_COM, PAR_LIST
  32. def gen_gzip(gm_file, save_file):
  33. # 压缩gamma.ini成zip,再写入到TV?? 还是直接写入gamma.ini到TV ??
  34. fin = open(gm_file, 'rb')
  35. gf = gzip.open('gamma_org.gzip', 'wb')
  36. data = fin.read()
  37. gf.write(data)
  38. fin.close()
  39. gf.close()
  40. # 计算原始文件crc32;
  41. # crc32 = binascii.crc32(data)
  42. # 重新读取gzip,再切掉8个字节?后再保存
  43. fg = open('gamma_org.gzip', 'rb')
  44. g_data = fg.read()
  45. fg.close()
  46. # 生成新的gamma.zip.
  47. fg = open(save_file, 'wb+')
  48. start_index = 10 + 'gamma_org.gzip'.__len__() + 1
  49. data_save = g_data[start_index:-4]
  50. fg.write(g_data[8:10])
  51. fg.write(data_save)
  52. fg.close()
  53. def test_all():
  54. # 读取配置文件;
  55. TV_COM, CA_COM, PAR_LIST = readPartern()
  56. NP_LIST = np.array(PAR_LIST)
  57. # 取第一列,再取第4位到末尾;
  58. Index11 = NP_LIST[:, 1][3:]
  59. print("11 pattern", Index11)
  60. # 打开CA310
  61. ca_port = CASerail()
  62. ca_port.open(CA_COM, 19200, 7, 'E', 2)
  63. # 开启CA310
  64. data = ca_port.startCommunication()
  65. print("CA310 开启", data)
  66. if True:
  67. print("CA310 显示模式", data)
  68. data = ca_port.set_XYZ_Display()
  69. print("CA310 同步模式", data)
  70. data = ca_port.setSynchMode(3)
  71. print("CA310 测量速度", data)
  72. data = ca_port.setMeasureSpeed(2)
  73. time.sleep(0.5)
  74. print("CA310 零校准", data)
  75. data = ca_port.setZeroCalibration()
  76. print("CA310 设置测试通道", data)
  77. data = ca_port.setChannel('01')
  78. # 打开TV串口;
  79. tv_port = MokaSerial()
  80. tv_port.open(TV_COM)
  81. print("进工厂模式")
  82. data = tv_port.sendcmd([0xAA, 0x06, 0x10, 0x01, 0xA7, 0xEF])
  83. print("白平衡初始化")
  84. data = tv_port.sendcmd([0xAA, 0x06, 0x16, 0x01, 0x0D, 0x49])
  85. print("关闭Localdimming")
  86. data = tv_port.sendcmd([0xAA, 0x07, 0x9F, 0x07, 0x00, 0xE1, 0x74])
  87. print("打开内置pattern")
  88. data = tv_port.sendcmd([0xAA, 0x06, 0x27, 0x02, 0x0B, 0x8E])
  89. print("切换标准色温")
  90. data = tv_port.sendcmd([0xAA, 0x06, 0x31, 0x01, 0x92, 0x38])
  91. print("gamma初始化")
  92. data = tv_port.sendcmd([0xAA, 0x07, 0x9F, 0x09, 0x01, 0xD2, 0x5A])
  93. XYZ_ALL = []
  94. print("内置pattern切换与CA310读取")
  95. for item in PAR_LIST:
  96. # print("item",item)
  97. if item.__len__() == 3:
  98. tv_port.send_parttern([int(item[0]), int(item[1]), int(item[2])])
  99. time.sleep(0.5)
  100. X, Y, Z = ca_port.readDisplay()
  101. print("CA410数据:", X, Y, Z)
  102. print("XYZ", X, Y, Z)
  103. XYZ_ALL.append([X, Y, Z])
  104. print("关闭内置pattern")
  105. data = tv_port.sendcmd([0xAA, 0x06, 0x27, 0x00, 0x2B, 0xCC])
  106. # 关闭CA310
  107. data = ca_port.endCommunication()
  108. # 调用gamma算法生成gamma.ini
  109. factory = autoGamma.FiretvFactory()
  110. RGBcalculator = factory.create()
  111. print("XYZ_ALL", XYZ_ALL)
  112. RGB255 = RGBcalculator.calRGB255_for_Debug(np.array(XYZ_ALL[0:3]).T, np.array(XYZ_ALL[3:]).T, np.array(Index11),
  113. 0.313, 0.329, 2.2)
  114. autoGamma.dumpRGB2ini(RGB255)
  115. #  生成切割文件;
  116. gen_gzip('gamma.ini', 'gamma_cut.zip')
  117. # 调用串口命令写入TV中;
  118. tv_port.send_gamma('gamma_cut.zip')
  119. # 使生效;
  120. tv_port.send_gamma_active('gamma.ini')
  121. autoGamma.showRGBcurve(RGB255)
  122. def get_test_result():
  123. # 读取配置文件;
  124. TV_COM, CA_COM, PAR_LIST = readPartern()
  125. NP_LIST = np.array(PAR_LIST)
  126. # 取第一列,再取第4位到末尾;
  127. Index11 = NP_LIST[:, 1][3:]
  128. print("11 pattern", Index11)
  129. # 打开CA310
  130. ca_port = CASerail()
  131. ca_port.open(CA_COM, 19200, 7, 'E', 2)
  132. # 开启CA310
  133. data = ca_port.startCommunication()
  134. print("CA310 开启", data)
  135. if True:
  136. print("CA310 显示模式", data)
  137. data = ca_port.set_XYZ_Display()
  138. print("CA310 同步模式", data)
  139. data = ca_port.setSynchMode(3)
  140. print("CA310 测量速度", data)
  141. data = ca_port.setMeasureSpeed(2)
  142. time.sleep(0.5)
  143. print("CA310 零校准", data)
  144. data = ca_port.setZeroCalibration()
  145. print("CA310 设置测试通道", data)
  146. data = ca_port.setChannel('01')
  147. # 打开TV串口;
  148. tv_port = MokaSerial()
  149. tv_port.open(TV_COM)
  150. print("进工厂模式")
  151. data = tv_port.sendcmd([0xAA, 0x06, 0x10, 0x01, 0xA7, 0xEF])
  152. print("打开内置pattern")
  153. data = tv_port.sendcmd([0xAA, 0x06, 0x27, 0x02, 0x0B, 0x8E])
  154. XYZ_ALL = []
  155. print("内置pattern切换与CA310读取")
  156. for item in PAR_LIST:
  157. # print("item",item)
  158. if item.__len__() == 3:
  159. tv_port.send_parttern([int(item[0]), int(item[1]), int(item[2])])
  160. time.sleep(0.5)
  161. X, Y, Z = ca_port.readDisplay()
  162. print("CA410数据:", X, Y, Z)
  163. print("XYZ", X, Y, Z)
  164. XYZ_ALL.append([X, Y, Z])
  165. print("关闭内置pattern")
  166. data = tv_port.sendcmd([0xAA, 0x06, 0x27, 0x00, 0x2B, 0xCC])
  167. # 关闭CA310
  168. data = ca_port.endCommunication()
  169. def test_zip():
  170. # 创建zip压缩包;
  171. zipFile = zipfile.ZipFile(r'gamma.zip', 'w')
  172. # 写入ini到zip中;
  173. zipFile.write(r'gamma.ini', 'gamma.ini', zipfile.ZIP_DEFLATED)
  174. zipFile.close()
  175. def test_gzip():
  176. fin = open('gamma.ini', 'rb')
  177. gf = gzip.open('gamma.gzip', 'wb')
  178. data = fin.read()
  179. gf.write(data)
  180. fin.close()
  181. gf.close()
  182. def test_result():
  183. # xyY_ALL = [[1,2,3],[4,5,6],[7,8,9]]
  184. # xyY_ALL = xyY_ALL[::-1]
  185. # for i in range(0, 3):
  186. # print(f"0.{xyY_ALL[i][0]} 0.{xyY_ALL[i][1]} {xyY_ALL[i][2]}")
  187. X = 7.82195
  188. Y = 3.78406
  189. Z = 2.37614
  190. x = X / (X + Y + Z)
  191. y = Y / (X + Y + Z)
  192. print(f"x={x} y= {y}")
  193. if __name__ == "__main__":
  194. test_all()
  195. # test_result()
  196. # test_tv()
  197. # gen_gzip(r'F:\bin\TCLTools\gamma.ini', 'aaa.cut.zip')
  198. # test_ca310()
  199. # test_gzip()