iT邦幫忙

2022 iThome 鐵人賽

DAY 22
0

前天在辨識的時候發現辨識的位置跑掉了,所以要來修正這個錯誤

首先以全螢幕來說,一般的螢幕畫面大約是19201080,那從pillow擷取全螢幕的話也是19201080,但是對pynput來說,因為我的螢幕大小有調整過,所以會以1280*720為準,為此則需要先寫一個調整大小的比率

# 對螢幕的尺寸修正
window_rate_x = 1280 / 1920
window_rate_y = 720 / 1080

接著就是調整position_list和size_list

# 尺寸修正
rate_x = size_x / 576
rate_y = size_y / 1280

# 尺寸大約60px
size_list = [
	(60 * rate_x, 60 * rate_y),
	(60 * rate_x, 60 * rate_y),
	(90 * rate_x, 90 * rate_y),
	(60 * rate_x, 60 * rate_y),
	(60 * rate_x, 60 * rate_y),
]

# 擷取圖片叉叉的左上位置
# 使用range1代表以左上為準,使用range2代表以右下為準
left_position_list = [
	(0 + self.range_x1, 0 + self.range_y1),
	(60 + self.range_x1, 60 + self.range_y1),
	(self.range_x2 - size_list[2][0], 60 + self.range_y1),
	(self.range_x2 - size_list[3][0], 40 + self.range_y1),
	(self.range_x2 - size_list[4][0], 80 + self.range_y1),
]

# 填入辨識範圍清單
self.position_list = []
for left in left_position_list:
	# 擷取圖片叉叉的右下位置
	right = (left[0]+size_list[0][0], left[1]+size_list[1][1])
	self.position_list.append([left, right])

最後在辨識結果改一下邏輯

x, not_x, skip, background = prediction[0]
if not_x > 0.8:
	continue
if x > 0.8:
	result_x = (p[0][0] + p[1][0]) / 2
	result_y = (p[0][1] + p[1][1]) / 2
	result = [result_x, result_y]
	break
elif skip > 0.8:
	result_x = (p[0][0] + p[1][0]) / 2
	result_y = (p[0][1] + p[1][1]) / 2
	result = [result_x, result_y]
	break
else:
	continue

這樣就能取得叉叉的中心點位置了,明天再來寫點擊方法


上一篇
Day22 點擊叉叉
下一篇
Day23 修改訓練模型
系列文
最近迷上了三消遊戲 那就來寫一個自動消珠程式吧30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言