resyfer

Untitled

Apr 23rd, 2024 (edited)
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 9.35 KB | None | 0 0
  1. def show_img(img):
  2.   plt.imshow(tf.squeeze(img), cmap="gray")
  3.   plt.show()
  4.   print(img.shape)
  5.  
  6. def load_image(path):
  7.   raw_img = tf.io.read_file(path)
  8.   img = tf.image.decode_image(raw_img, channels=1)
  9.   # img = tf.image.resize(img, [height, width])
  10.   img = tf.cast(img, tf.float32)
  11.   return img
  12.  
  13. def sobel_edge(img, sigma=0.1, lower=50, upper=100):
  14.  
  15.   blurred_img = tfa.image.gaussian_filter2d(img, sigma=sigma, filter_shape=(5, 5)) # Gaussian Blue
  16.  
  17.   blurred_img = tf.cast(blurred_img, dtype=tf.float32)
  18.  
  19.   img_batch = tf.expand_dims(blurred_img, axis=0)
  20.  
  21.   edges = tf.image.sobel_edges(img_batch) # Sobel Edge Detection
  22.   edges = tf.norm(img_batch, axis=-1) # Normalizing
  23.  
  24.   return blurred_img
  25.  
  26. def preprocess_img(img):
  27.   img = (img / 255) # 0 - 1 Grayscale
  28.   img = 1 - img # 0 - 1 Grayscale
  29.   img = tf.where(img >= 0.5, tf.constant(1), tf.constant(0)) # Binarization
  30.   img = sobel_edge(img)
  31.  
  32.   return img
  33.  
  34. def contours_to_tensors(contours, image_shape):
  35.   # Empty image
  36.   img = np.zeros(image_shape, dtype=np.uint8)
  37.  
  38.   # Draw contours on the image
  39.   cv2.drawContours(img, contours, -1, (255), thickness=cv2.FILLED)
  40.  
  41.   img_tensor = tf.convert_to_tensor(img, dtype=tf.float32)
  42.   return img_tensor
  43.  
  44. def get_words(img, threshold=128):
  45.   passed_counter = 0
  46.  
  47.   # print(img.shape)
  48.  
  49.   # Segmentation
  50.   img_np = img.numpy()
  51.   img_np = tf.image.convert_image_dtype(img_np, dtype=tf.uint8)
  52.  
  53.   img_np = np.squeeze(img_np, axis=-1)  # Remove the singleton channel dimension
  54.  
  55.   contours, _ = cv2.findContours(img_np, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
  56.  
  57.   contour_tensors = []
  58.  
  59.   for i, contour in enumerate(contours):
  60.     x, y, w, h = cv2.boundingRect(contour)
  61.  
  62.     cv2.drawContours(img_np, contour, -1, (img.shape[0], img.shape[1]), thickness=cv2.FILLED)
  63.     region_of_interest = img_np[y:y+h, x:x+w]
  64.  
  65.     contour_tensor = tf.convert_to_tensor(region_of_interest, dtype=tf.float32)
  66.     contour_tensor = (contour_tensor / 255) # Grayscale
  67.     contour_tensor = tf.where(contour_tensor >= 0.5, tf.constant(1), tf.constant(0)) # Binarization
  68.     contour_tensor = tf.expand_dims(contour_tensor, axis=-1)
  69.     contour_tensor = tf.image.resize(contour_tensor, [height, width], method=tf.image.ResizeMethod.NEAREST_NEIGHBOR)
  70.  
  71.     # Lower and Upper Threshold
  72.     contour_sum = tf.reduce_sum(contour_tensor).numpy()
  73.     if contour_sum < lower_sum or contour_sum > upper_sum:
  74.       passed_counter += 1
  75.       continue
  76.  
  77.     if len(contour_tensor) != 0:
  78.       contour_tensors.append(contour_tensor)
  79.  
  80.   print("Passed: ", passed_counter)
  81.   return contour_tensors
  82.  
  83. def get_words_from_img(img):
  84.   img = preprocess_img(img)
  85.   words = get_words(img)
  86.   return words
  87.  
  88.  
  89. Passed:  1
  90. Passed:  0
  91. Passed:  0
  92. Passed:  4
  93.  
  94. WARNING:tensorflow:5 out of the last 5 calls to <function gaussian_filter2d at 0x7fba0aee93f0> triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has reduce_retracing=True option that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for  more details.
  95. WARNING:tensorflow:6 out of the last 6 calls to <function gaussian_filter2d at 0x7fba0aee93f0> triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has reduce_retracing=True option that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for  more details.
  96.  
  97. Passed:  0
  98. Passed:  0
  99. Passed:  0
  100. Passed:  0
  101. Passed:  6
  102. Passed:  0
  103. Passed:  1
  104. Passed:  0
  105. Passed:  18
  106. Passed:  3
  107. Passed:  1
  108. Passed:  38
  109. Passed:  2
  110. Passed:  0
  111. Passed:  2
  112. Passed:  0
  113. Passed:  5
  114. Passed:  1
  115. Passed:  12
  116. Passed:  3
  117. Passed:  0
  118. Passed:  0
  119. Passed:  3
  120. Passed:  0
  121. Passed:  1
  122. Passed:  4
  123. Passed:  5
  124. Passed:  0
  125. Passed:  7
  126. Passed:  0
  127. Passed:  0
  128. Passed:  4
  129. Passed:  3
  130. Passed:  5
  131. Passed:  1
  132. Passed:  1
  133. Passed:  0
  134. Passed:  0
  135. Passed:  16
  136. Passed:  0
  137. Passed:  1
  138. Passed:  0
  139. Passed:  0
  140. Passed:  17
  141. Passed:  0
  142. Passed:  0
  143. Passed:  0
  144. Passed:  0
  145. Passed:  1
  146. Passed:  0
  147. Passed:  0
  148. Passed:  0
  149. Passed:  2
  150. Passed:  0
  151. Passed:  2
  152. Passed:  12
  153. Passed:  0
  154. Passed:  1
  155. Passed:  0
  156. Passed:  13
  157. Passed:  14
  158. Passed:  0
  159. Passed:  2
  160. Passed:  1
  161. Passed:  0
  162. Passed:  58
  163. Passed:  8
  164. Passed:  75
  165. Passed:  1
  166. Passed:  6
  167. Passed:  0
  168. Passed:  0
  169. Passed:  1
  170. Passed:  4
  171. Passed:  0
  172. Passed:  1
  173. Passed:  0
  174. Passed:  0
  175. Passed:  0
  176. Passed:  1
  177. Passed:  5
  178. Passed:  0
  179. Passed:  42
  180. Passed:  43
  181. Passed:  1
  182. Passed:  0
  183. Passed:  1
  184. Passed:  62
  185. Passed:  0
  186. Passed:  3
  187. Passed:  1
  188. Passed:  0
  189. Passed:  2
  190. Passed:  0
  191. Passed:  5
  192. Passed:  2
  193. Passed:  0
  194. Passed:  0
  195. Passed:  0
  196. Passed:  0
  197. Passed:  4
  198. Passed:  33
  199. Passed:  0
  200. Passed:  1
  201. Passed:  2
  202. Passed:  2
  203. Passed:  0
  204. Passed:  3
  205. Passed:  3
  206. Passed:  0
  207. Passed:  2
  208. Passed:  3
  209. Passed:  0
  210. Passed:  3
  211. Passed:  0
  212. Passed:  0
  213. Passed:  0
  214. Passed:  0
  215. Passed:  2
  216. Passed:  2
  217. Passed:  0
  218. Passed:  11
  219. Passed:  0
  220. Passed:  0
  221. Passed:  1
  222. Passed:  40
  223. Passed:  0
  224. Passed:  1
  225. Passed:  0
  226. Passed:  1
  227. Passed:  8
  228. Passed:  1
  229. Passed:  2
  230. Passed:  7
  231. Passed:  9
  232. Passed:  0
  233. Passed:  0
  234. Passed:  0
  235. Passed:  0
  236. Passed:  6
  237. Passed:  0
  238. Passed:  0
  239. Passed:  0
  240. Passed:  0
  241. Passed:  0
  242. Passed:  3
  243. Passed:  8
  244. Passed:  0
  245. Passed:  5
  246. Passed:  2
  247. Passed:  4
  248. Passed:  2
  249. Passed:  1
  250. Passed:  32
  251. Passed:  0
  252. Passed:  2
  253. Passed:  0
  254. Passed:  4
  255. Passed:  0
  256. Passed:  2
  257. Passed:  36
  258. Passed:  0
  259. Passed:  2
  260. Passed:  9
  261. Passed:  3
  262. Passed:  1
  263. Passed:  0
  264. Passed:  19
  265. Passed:  1
  266. Passed:  0
  267. Passed:  6
  268. Passed:  0
  269. Passed:  1
  270. Passed:  3
  271. Passed:  42
  272. Passed:  0
  273. Passed:  0
  274. Passed:  0
  275. Passed:  3
  276. Passed:  0
  277. Passed:  0
  278. Passed:  0
  279. Passed:  10
  280. Passed:  0
  281. Passed:  30
  282. Passed:  0
  283. Passed:  2
  284. Passed:  2
  285. Passed:  2
  286. Passed:  0
  287. Passed:  0
  288. Passed:  2
  289. Passed:  0
  290. Passed:  0
  291. Passed:  0
  292. Passed:  5
  293. Passed:  4
  294. Passed:  31
  295. Passed:  0
  296. Passed:  11
  297. Passed:  1
  298. Passed:  1
  299. Passed:  1
  300. Passed:  0
  301. Passed:  5
  302. Passed:  0
  303. Passed:  6
  304. Passed:  2
  305. Passed:  1
  306. Passed:  1
  307. Passed:  0
  308. Passed:  0
  309. Passed:  0
  310. Passed:  0
  311. Passed:  0
  312. Passed:  0
  313. Passed:  0
  314. Passed:  3
  315. Passed:  5
  316. Passed:  4
  317. Passed:  4
  318. Passed:  0
  319. Passed:  4
  320. Passed:  0
  321. Passed:  1
  322. Passed:  0
  323. Passed:  0
  324. Passed:  7
  325. Passed:  2
  326. Passed:  2
  327. Passed:  1
  328. Passed:  1
  329. Passed:  1
  330. Passed:  0
  331. Passed:  0
  332. Passed:  13
  333. Passed:  8
  334. Passed:  1
  335. Passed:  0
  336. Passed:  0
  337. Passed:  2
  338. Passed:  1
  339. Passed:  11
  340. Passed:  38
  341. Passed:  1
  342. Passed:  1
  343. Passed:  0
  344. Passed:  25
  345. Passed:  0
  346. Passed:  0
  347. Passed:  0
  348. Passed:  2
  349. Passed:  3
  350. Passed:  0
  351. Passed:  53
  352. Passed:  145
  353. Passed:  0
  354. Passed:  3
  355. Passed:  2
  356. Passed:  2
  357. Passed:  2
  358. Passed:  0
  359. Passed:  1
  360. Passed:  32
  361. Passed:  8
  362. Passed:  1
  363. Passed:  0
  364. Passed:  1
  365. Passed:  0
  366. Passed:  1
  367. Passed:  0
  368. Passed:  1
  369. Passed:  0
  370. Passed:  35
  371. Passed:  1
  372. Passed:  0
  373. Passed:  3
  374. Passed:  0
  375. Passed:  0
  376. Passed:  2
  377. Passed:  4
  378. Passed:  24
  379. Passed:  3
  380. Passed:  0
  381. Passed:  1
  382. Passed:  1
  383. Passed:  0
  384. Passed:  12
  385. Passed:  39
  386. Passed:  1
  387. Passed:  4
  388. Passed:  19
  389. Passed:  19
  390. Passed:  2
  391. Passed:  4
  392. Passed:  18
  393. Passed:  21
  394. Passed:  0
  395. Passed:  3
  396. Passed:  16
  397. Passed:  0
  398. Passed:  10
  399. Passed:  23
  400. Passed:  0
  401. Passed:  37
  402. Passed:  4
  403. Passed:  0
  404. Passed:  1
  405. Passed:  1
  406. Passed:  63
  407. Passed:  1
  408. Passed:  1
  409. Passed:  0
  410. Passed:  0
  411. Passed:  1
  412. Passed:  2
  413. Passed:  3
  414. Passed:  3
  415. Passed:  1
  416. Passed:  2
  417. Passed:  14
  418. Passed:  3
  419. Passed:  0
  420. Passed:  22
  421. Passed:  4
  422. Passed:  29
  423. Passed:  5
  424. Passed:  2
  425. Passed:  2
  426. Passed:  4
  427. Passed:  1
  428. Passed:  0
  429. Passed:  2
  430. Passed:  29
  431. Passed:  0
  432. Passed:  11
  433. Passed:  2
  434. Passed:  0
  435. Passed:  0
  436. Passed:  0
  437. Passed:  0
  438. Passed:  3
  439. Passed:  0
  440. Passed:  0
  441. Passed:  5
  442. Passed:  0
  443. Passed:  0
  444. Passed:  2
  445. Passed:  18
  446. Passed:  0
  447. Passed:  4
  448. Passed:  8
  449. Passed:  0
  450. Passed:  4
  451. Passed:  0
  452. Passed:  1
  453. Passed:  1
  454. Passed:  4
  455. Passed:  5
  456. Passed:  1
  457. Passed:  4
  458. Passed:  0
  459. Passed:  1
  460. Passed:  4
  461. Passed:  1
  462. Passed:  0
  463. Passed:  8
  464. Passed:  2
  465. Passed:  3
  466. Passed:  0
  467. Passed:  15
  468. Passed:  9
  469. Passed:  1
  470. Passed:  1
  471. Passed:  0
  472. Passed:  5
  473. Passed:  0
  474. Passed:  0
  475. Passed:  3
  476. Passed:  1
  477. Passed:  0
  478. Passed:  1
  479. Passed:  15
  480. Passed:  0
  481. Passed:  19
  482. Passed:  3
  483. Passed:  5
  484. Passed:  8
  485. Passed:  1
  486. Passed:  1
  487. Passed:  2
  488. Passed:  0
  489. Passed:  0
  490. Passed:  3
  491. Passed:  0
  492. Passed:  0
  493. Passed:  1
  494. Passed:  1
  495. Passed:  1
  496. Passed:  0
  497. Passed:  2
  498. Passed:  1
  499. Passed:  7
  500. Passed:  0
  501. Passed:  20
  502. Passed:  0
  503. Passed:  4
  504. Passed:  5
  505. Passed:  0
  506. Passed:  7
  507. Passed:  1
  508. Passed:  1
  509. Passed:  0
  510. Passed:  2
  511. Passed:  2
  512. Passed:  2
  513. Passed:  42
  514. Passed:  4
  515. Passed:  1
  516. Passed:  0
  517. Passed:  6
  518. Passed:  1
  519. Passed:  0
  520. Passed:  0
  521. Passed:  2
  522. Passed:  2
  523. Passed:  5
  524. Passed:  1
  525. Passed:  1
  526. Passed:  2
  527. Passed:  6
  528. Passed:  12
  529. Passed:  11
  530. Passed:  10
  531. Passed:  0
  532. Passed:  0
  533. Passed:  1
  534. Passed:  0
  535. Passed:  0
  536. Passed:  8
  537. Passed:  0
  538. Passed:  1
  539. Passed:  10
  540. Passed:  3
  541. Passed:  2
  542. Passed:  0
  543. Passed:  0
  544. Passed:  0
  545. Passed:  0
  546. Passed:  0
Advertisement
Add Comment
Please, Sign In to add comment