chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一個“槍槍爆頭”的視覺AI自瞄程序!

新機(jī)器視覺 ? 來源:CSDN ? 作者:Yunlord ? 2022-05-05 15:31 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

前段時間在網(wǎng)上看到《警惕AI外掛!我寫了一個槍槍爆頭的視覺AI,又親手“殺死”了它》 這個視頻,引起了我極大的興趣。

視頻中提到,在國外有人給使命召喚做了個AI程序來實現(xiàn)自動瞄準(zhǔn)功能。它跟傳統(tǒng)外掛不一樣,該程序不需要用游戲內(nèi)存數(shù)據(jù),也不往服務(wù)器發(fā)送作弊指令,只是通過計算機(jī)視覺來分析游戲畫面,定位敵人,把準(zhǔn)星移動過去,跟人類玩家操作一模一樣,因此反外掛程序無法檢測到它。而且更恐怖的是這AI程序全平臺通用,不管是X-box,PS4還是手機(jī),只要能把畫面接出來,把操作送進(jìn)去,就可以實現(xiàn)“槍槍爆頭”。

2aaeaaf4-cbaf-11ec-bce3-dac502259ad0.gif

外網(wǎng)的那個開發(fā)者用的是基于方框的目標(biāo)檢測,但是像射擊游戲需要定位人體的場景,其實有比方框檢測更好的算法。up主就利用了幾個小時的時間就寫出來了一個效果更好,功能更夸張的AI程序,也就是利用人體關(guān)節(jié)點檢測技術(shù),通過大量真人圖片訓(xùn)練出來的視覺AI,可以把視頻和圖片里人物的關(guān)節(jié)信息提取出來 并給出每個部位中心點的精確像素坐標(biāo),而且雖然訓(xùn)練的是是真人圖片,但是給它游戲里的人物,他也一樣能把人體關(guān)節(jié)定位出來。

可以說由于這類AI程序的出現(xiàn),現(xiàn)在fps游戲的形式就是山雨欲來風(fēng)滿樓,十分嚴(yán)峻啊!

下面,我們先開始介紹這個視覺AI自動瞄準(zhǔn)的制作思路,然后再談?wù)勥@個問題帶來的影響以及如何解決這個問題。

一、核心功能設(shè)計

總體來說,我們首先需要訓(xùn)練好一個人體關(guān)節(jié)點檢測的AI視覺模型,然后將游戲畫面實時送入AI視覺模型中,再反饋出游戲人物各個部位的像素位置,然后確定瞄準(zhǔn)點,并將鼠標(biāo)移動到瞄準(zhǔn)點位置。

拆解需求后,整理出核心功能如下:

  • 訓(xùn)練人體關(guān)節(jié)點檢測模型
  • 輸入視頻或圖片到AI視覺模型,并輸出瞄準(zhǔn)點位置。
  • 自動操作鼠標(biāo)移動到對應(yīng)瞄準(zhǔn)位置

最終想要實現(xiàn)的效果如下圖所示:

2b1cf6b2-cbaf-11ec-bce3-dac502259ad0.gif

二、核心實現(xiàn)步驟

1.訓(xùn)練人體關(guān)節(jié)點檢測模型

在這一部分,我打算使用由微軟亞洲研究院和中科大提出High-Resoultion Net(HRNet)來進(jìn)行人體關(guān)節(jié)點檢測,該模型通過在高分辨率特征圖主網(wǎng)絡(luò)逐漸并行加入低分辨率特征圖子網(wǎng)絡(luò),不同網(wǎng)絡(luò)實現(xiàn)多尺度融合與特征提取實現(xiàn)的,所以在目前的通用數(shù)據(jù)集上取得了較好的結(jié)果。

1.1 HRNet代碼庫安裝

按照官方的install指導(dǎo)命令,安裝十分簡單。我是采用本地源代碼安裝方式。

gitclonehttps://github.com/leoxiaobin/deep-high-resolution-net.pytorch.git
python-mpipinstall-edeep-high-resolution-ne.pytorch

1.2 人體關(guān)鍵點數(shù)據(jù)集下載

首先打開COCO數(shù)據(jù)集官方下載鏈接。

對于Images一欄的綠色框需要下載三個大的文件,分別對應(yīng)的是訓(xùn)練集,驗證集和測試集:

https://images.cocodataset.org/zips/train2017.zip

https://images.cocodataset.org/zips/val2017.zip

https://images.cocodataset.org/zips/test2017.zip

對于Annotations一欄綠色框需要下載一個標(biāo)注文件:

https://images.cocodataset.org/annotations/annotations_trainval2017.zip

將文件解壓后,可以得到如下目錄結(jié)構(gòu):

其中的 person_keypoints_train2017.json 和 person_keypoints_val2017.json 分別對應(yīng)的人體關(guān)鍵點檢測對應(yīng)的訓(xùn)練集和驗證集標(biāo)注。

annotations
├──captions_train2017.json
├──captions_val2017.json
├──instances_train2017.json
├──instances_val2017.json
├──person_keypoints_train2017.json人體關(guān)鍵點檢測對應(yīng)的訓(xùn)練集標(biāo)注文件
└──person_keypoints_val2017.json人體關(guān)鍵點檢測對應(yīng)的驗證集標(biāo)注文件

在本地代碼庫datasets目錄下面新建立coco目錄,將上面的訓(xùn)練集,驗證集以及標(biāo)注文件放到本地代碼的coco目錄下面

datasets
├──coco
│├──annotations
│├──test2017
│├──train2017
│└──val2017

1.3 環(huán)境配置與模型訓(xùn)練

核心訓(xùn)練代碼如下:

deftrain(config,train_loader,model,criterion,optimizer,epoch,
output_dir,tb_log_dir,writer_dict):
batch_time=AverageMeter()
data_time=AverageMeter()
losses=AverageMeter()
acc=AverageMeter()
#switchtotrainmode
model.train()
end=time.time()
fori,(input,target,target_weight,meta)inenumerate(train_loader):
data_time.update(time.time()-end)
outputs=model(input)
target=target.cuda(non_blocking=True)
target_weight=target_weight.cuda(non_blocking=True)
ifisinstance(outputs,list):
loss=criterion(outputs[0],target,target_weight)
foroutputinoutputs[1:]:
loss+=criterion(output,target,target_weight)
else:
output=outputs
loss=criterion(output,target,target_weight)
optimizer.zero_grad()
loss.backward()
optimizer.step()
#measureaccuracyandrecordloss
losses.update(loss.item(),input.size(0))
_,avg_acc,cnt,pred=accuracy(output.detach().cpu().numpy(),
target.detach().cpu().numpy())
acc.update(avg_acc,cnt)
batch_time.update(time.time()-end)
end=time.time()
ifi%config.PRINT_FREQ==0:
msg='Epoch:[{0}][{1}/{2}]	'
'Time{batch_time.val:.3f}s({batch_time.avg:.3f}s)	'
'Speed{speed:.1f}samples/s	'
'Data{data_time.val:.3f}s({data_time.avg:.3f}s)	'
'Loss{loss.val:.5f}({loss.avg:.5f})	'
'Accuracy{acc.val:.3f}({acc.avg:.3f})'.format(
epoch,i,len(train_loader),batch_time=batch_time,
speed=input.size(0)/batch_time.val,
data_time=data_time,loss=losses,acc=acc)
logger.info(msg)
writer=writer_dict['writer']
global_steps=writer_dict['train_global_steps']
writer.add_scalar('train_loss',losses.val,global_steps)
writer.add_scalar('train_acc',acc.val,global_steps)
writer_dict['train_global_steps']=global_steps+1
prefix='{}_{}'.format(os.path.join(output_dir,'train'),i)
save_debug_images(config,input,meta,target,pred*4,output,
prefix)

訓(xùn)練結(jié)果:

2b82873e-cbaf-11ec-bce3-dac502259ad0.jpg

2.輸入視頻或圖片實時反饋瞄準(zhǔn)點坐標(biāo)

2.1 實時讀取屏幕畫面

importpyautogui
img=pyautogui.screenshot()

在一個 1920×1080 的屏幕上,screenshot()函數(shù)要消耗100微秒,基本達(dá)到實時傳入游戲畫面要求。

如果不需要截取整個屏幕,還有一個可選的region參數(shù)。你可以把截取區(qū)域的左上角XY坐標(biāo)值和寬度、高度傳入截取。

im=pyautogui.screenshot(region=(0,0,300,400))

2ba4f26a-cbaf-11ec-bce3-dac502259ad0.jpg

2.2 讀取圖片反饋坐標(biāo)

parser.add_argument('--keypoints',help='f:fullbody17keypoints,h:halfbody11keypoints,sh:smallhalfbody6keypotins')
hp=PoseEstimation(config=args.keypoints,device="cuda:0")

可以選擇人體關(guān)節(jié)點檢測數(shù)目,包括上半身6個關(guān)鍵點、上半身11個關(guān)鍵點以及全身17個關(guān)鍵點,然后構(gòu)建探測器。

人體關(guān)節(jié)點對應(yīng)序號:

"keypoints":{0:"nose",1:"left_eye",2:"right_eye",3:"left_ear",4:"right_ear",5:"left_shoulder",6:"right_shoulder",7:"left_elbow",8:"right_elbow",9:"left_wrist",10:"right_wrist",11:"left_hip",12:"right_hip",13:"left_knee",14:"right_knee",15:"left_ankle",16:"right_ankle"}

因此如果為了自動瞄準(zhǔn)頭部實現(xiàn)“槍槍爆頭”,僅需要反饋 0: "nose"的坐標(biāo)點就行了。

代碼如下:

location=hp.detect_head(img_path,detect_person=True,waitKey=0)

defdetect_head(self,image_path,detect_person=True,waitKey=0):

bgr_image=cv2.imread(image_path)
kp_points,kp_scores,boxes=self.detect_image(bgr_image,
threshhold=self.threshhold,
detect_person=detect_person)
returnkp_points[0][0]

輸出結(jié)果:[701.179 493.55]

2bbcfff4-cbaf-11ec-bce3-dac502259ad0.jpg

可以看到雖然訓(xùn)練的是真人圖片,但是給它游戲里的人物,它也一樣能把人體關(guān)節(jié)定位出來。

深度神經(jīng)網(wǎng)絡(luò)之所以厲害,就是因為它有一定的演繹推廣能力。沒見過的東西,他也能靠著層次線索分析一波,結(jié)果往往也挺準(zhǔn)。而且游戲場景是現(xiàn)實場景的簡化之后的結(jié)果,環(huán)境和光影都要簡單的多,能把現(xiàn)實世界分析明白的視覺AI,對付個3D游戲更是小菜一碟了。

3.自動移動鼠標(biāo)到對應(yīng)的坐標(biāo)點

3.1 移動鼠標(biāo)

移動到指定位置:

pyautogui.moveTo(100,300,duration=1)

將鼠標(biāo)移動到指定的坐標(biāo);duration 的作用是設(shè)置移動時間,所有的gui函數(shù)都有這個參數(shù),而且都是可選參數(shù)。

獲取鼠標(biāo)位置:

print(pyautogui.position())#得到當(dāng)前鼠標(biāo)位置;輸出:Point(x=200, y=800)

3.2 控制鼠標(biāo)點擊

單擊鼠標(biāo):

#點擊鼠標(biāo)
pyautogui.click(10,10)#鼠標(biāo)點擊指定位置,默認(rèn)左鍵
pyautogui.click(10,10,button='left')#單擊左鍵
pyautogui.click(1000,300,button='right')#單擊右鍵
pyautogui.click(1000,300,button='middle')#單擊中間

雙擊鼠標(biāo):

pyautogui.doubleClick(10,10)#指定位置,雙擊左鍵
pyautogui.rightClick(10,10)#指定位置,雙擊右鍵
pyautogui.middleClick(10,10)#指定位置,雙擊中鍵

點擊 & 釋放:

pyautogui.mouseDown()#鼠標(biāo)按下
pyautogui.mouseUp()#鼠標(biāo)釋放

至此,視覺AI自瞄程序已經(jīng)基本設(shè)計完成。

三、引發(fā)的思考

總的來說,視覺AI給FPS游戲帶來了一波危機(jī)!

這類視覺AI程序目前存在三個威脅:

  • 準(zhǔn)確性
  • 隱蔽性
  • 通用性

第一個威脅就是超越人類的準(zhǔn)確性。雖然人腦的高層次演繹歸納能力是遠(yuǎn)勝于AI的,但是在低級信息處理速度和精確度上,人類就很難比得過專精某個功能的AI了,比如在人體關(guān)節(jié)定位這件事上,給出人體每個部位的中心位置只需要幾毫秒,而且精確到像素點,而同樣一張圖片給人類看個幾毫秒,都不一定能夠看清人在哪,更別說定位關(guān)節(jié)移動鼠標(biāo)了。

第二個威脅就是無法被外掛程序檢測的隱蔽性。和傳統(tǒng)外掛不一樣,傳統(tǒng)外掛要操作游戲的內(nèi)存數(shù)據(jù)或者文件數(shù)據(jù),從而獲取游戲世界的信息。讓開掛的人打出一些正常玩家不可能實現(xiàn)的作弊操作。而視覺AI是完全獨立于游戲數(shù)據(jù)之外的,和人一樣,也是通過實時觀察畫面發(fā)送鼠標(biāo)和鍵盤指令,所以傳統(tǒng)的反外掛程序只能反個寂寞。

第三個威脅就是適用全平臺的通用性。首先這個AI視覺模型是通過大量真人照片訓(xùn)練出來的,但是能夠識別游戲中的人物,這意味著可以攻陷大部分FPS游戲。AI操作游戲和人操作游戲交互方式是沒區(qū)別的,所以衍生出更大的問題,只要能把畫面接入到這個模型中,就可以攻陷任意一種游戲平臺,包括電腦、主機(jī)、手機(jī)等,無論你做的多封閉,生態(tài)維護(hù)的多好,在視覺AI面前眾生平等。

那么我們該如何解決這個問題呢?

可以通過算法檢測游戲異常操作,這也是一種思路,但是實現(xiàn)起來還是比較困難,畢竟可以讓AI更像人類的操作。

而我想到之前比較火的deepfake,那么我們是不是可以通過對抗樣本來解決這個問題呢,使得視覺AI識別錯誤?

說了那么多,其實也沒有什么好的結(jié)論,只能說技術(shù)的發(fā)展是在不斷對抗中前進(jìn)以及規(guī)范。


																				
																					

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • AI
    AI
    +關(guān)注

    關(guān)注

    91

    文章

    39707

    瀏覽量

    301314
  • 計算機(jī)視覺
    +關(guān)注

    關(guān)注

    9

    文章

    1715

    瀏覽量

    47622
  • 數(shù)據(jù)集
    +關(guān)注

    關(guān)注

    4

    文章

    1236

    瀏覽量

    26186

原文標(biāo)題:寫了一個“槍槍爆頭”的視覺AI自瞄程序!

文章出處:【微信號:vision263com,微信公眾號:新機(jī)器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    基于單片機(jī)的額溫設(shè)計

    電子發(fā)燒友網(wǎng)站提供《基于單片機(jī)的額溫設(shè)計.docx》資料免費下載
    發(fā)表于 03-01 15:36 ?0次下載

    新大陸NLS NVH220工業(yè)掃碼:工業(yè)場景的條碼識讀全能王

    ,成為眾多企業(yè)數(shù)字化升級的得力助手,更是新大陸掃碼家族中極具競爭力的工業(yè)級力作。這款工業(yè)掃碼的核心優(yōu)勢源于強(qiáng)大的AI解碼能力。搭載高性能雙核AI處理器與專屬
    的頭像 發(fā)表于 02-05 11:07 ?134次閱讀
    新大陸NLS NVH220工業(yè)掃碼<b class='flag-5'>槍</b>:工業(yè)場景的條碼識讀全能王

    基于MCU單片機(jī)CH32X035的筋膜解決方案

    在智能健身設(shè)備不斷發(fā)展的今天,筋膜作為高效放松工具,其性能核心關(guān)鍵在于主控芯片的選用。英尚微電子的筋膜解決方案采用MCU單片機(jī)CH32X035,可為筋膜提供穩(wěn)定、高效且功能豐富的核心控制,顯著提升產(chǎn)品競爭力與用戶體驗。
    的頭像 發(fā)表于 12-17 14:12 ?316次閱讀

    拆解:30W 2800轉(zhuǎn)速 飛利浦筋膜

    本次拆解的飛利浦便攜式筋膜PPM3203G的電驅(qū)電控系統(tǒng)
    的頭像 發(fā)表于 12-15 11:41 ?5163次閱讀
    拆解:30W 2800轉(zhuǎn)速 飛利浦筋膜<b class='flag-5'>槍</b>

    在筋膜上應(yīng)用的MCU微控制器方案

    筋膜是現(xiàn)在很多人必不可少的放松肌肉的健身工具,而實現(xiàn)筋膜的高效、穩(wěn)定、安全運行,則需要內(nèi)部搭載的MCU微控制器來負(fù)責(zé)控制電機(jī)運轉(zhuǎn)、保護(hù)電路安全并實現(xiàn)各種智能功能。英尚微電子的筋膜方案采用CH32V007 MCU微控制器為核
    的頭像 發(fā)表于 12-09 16:39 ?662次閱讀
    在筋膜<b class='flag-5'>槍</b>上應(yīng)用的MCU微控制器方案

    掃鐳射雕碼用什么掃碼?

    在電子制造、汽車零部件等行業(yè),鐳射雕碼(DPM碼的常見形式)因耐磨、耐高溫的特性成為產(chǎn)品追溯的核心標(biāo)識。但金屬、塑料等材質(zhì)的反光、曲面凹凸,加上鐳雕碼可能存在的模糊、低對比度問題,讓普通掃碼頻頻
    的頭像 發(fā)表于 11-20 15:30 ?483次閱讀
    掃鐳射雕碼用什么掃碼<b class='flag-5'>槍</b>?

    傳統(tǒng)普通掃碼與RFID掃描對比分析

    本文深入對比傳統(tǒng)普通掃碼與RFID掃描的核心差異,從成本結(jié)構(gòu)、使用場景到技術(shù)特點進(jìn)行全面分析,幫助企業(yè)選擇最適合的數(shù)據(jù)采集解決方案。
    的頭像 發(fā)表于 11-19 11:03 ?1193次閱讀
    傳統(tǒng)普通掃碼<b class='flag-5'>槍</b>與RFID掃描<b class='flag-5'>槍</b>對比分析

    NVH200系列掃碼高效掃碼應(yīng)用 NVH200新大陸掃碼價格多少

    在工業(yè)生產(chǎn)與物流管理場景中,掃碼的效率與耐用性直接影響作業(yè)節(jié)奏,新大陸掃碼設(shè)備憑借硬核性能成為行業(yè)優(yōu)選,其中NVH200系列新大陸掃碼作為國內(nèi)首款工業(yè)級產(chǎn)品,更以高效表現(xiàn)站穩(wěn)市場。NVH200
    的頭像 發(fā)表于 11-05 14:47 ?403次閱讀
    NVH200系列掃碼<b class='flag-5'>槍</b>高效掃碼應(yīng)用 NVH200新大陸掃碼<b class='flag-5'>槍</b>價格多少

    使用合科泰功率器件的筋膜適配器解決方案

    當(dāng)筋膜從專業(yè)健身場景走進(jìn)普通家庭,成為運動后放松的標(biāo)配,其背后的電源適配器,正悄悄定義著放松體驗的底線。例如在充電時發(fā)燙到不敢碰、充到半突然斷電、長期過充導(dǎo)致電池壽命縮短等等,這些看似
    的頭像 發(fā)表于 10-29 11:24 ?877次閱讀

    上海海思朱雀顯示智能電競解決方案的制勝優(yōu)勢

    當(dāng)你全神貫注吃雞的時候,明明的很準(zhǔn),卻落空;自己只揉了下眼睛,就被顆子彈無聲的結(jié)束了戰(zhàn)局。在電競世界的激烈角逐中,每
    的頭像 發(fā)表于 09-29 09:50 ?753次閱讀

    工業(yè)掃碼該怎么選?霍尼韋爾工業(yè)掃碼優(yōu)缺點解析

    在工業(yè)自動化中,工業(yè)掃碼是生產(chǎn)、物流、倉儲的核心工具。選對工業(yè)掃碼能大幅提升效率,霍尼韋爾工業(yè)掃碼作為行業(yè)主流產(chǎn)品,其表現(xiàn)對企業(yè)選型有重要參考意義。選工業(yè)掃碼,關(guān)鍵看三大核心維
    的頭像 發(fā)表于 09-04 15:18 ?943次閱讀
    工業(yè)掃碼<b class='flag-5'>槍</b>該怎么選?霍尼韋爾工業(yè)掃碼<b class='flag-5'>槍</b>優(yōu)缺點解析

    310V/DC154V 額定電壓支持:無刷熱風(fēng)的高效驅(qū)動方案--【其利天下】

    隨著電子技術(shù)的不斷發(fā)展,熱風(fēng)作為種高效、節(jié)能且性能穩(wěn)定的工具,逐漸成為市場上的主流選擇。本文通過對無刷熱風(fēng)驅(qū)動方案的市場現(xiàn)狀、技術(shù)難題、以及其利天下技術(shù)的解決方案,全面展示了熱風(fēng)
    的頭像 發(fā)表于 07-17 17:59 ?279次閱讀
    310V/DC154V 額定電壓支持:無刷熱風(fēng)<b class='flag-5'>槍</b>的高效驅(qū)動方案--【其利天下】

    RS232轉(zhuǎn)Profinet網(wǎng)關(guān):破解掃碼高速通訊的關(guān)鍵樞紐

    在工業(yè)自動化領(lǐng)域,實現(xiàn)設(shè)備的高效通訊是至關(guān)重要的。掃碼作為種常見的數(shù)據(jù)采集設(shè)備,其在生產(chǎn)線上的應(yīng)用極為廣泛。要使得這些設(shè)備能夠無縫對接現(xiàn)代工業(yè)網(wǎng)絡(luò),如Profinet系統(tǒng),就需要
    的頭像 發(fā)表于 06-13 16:06 ?453次閱讀
    RS232轉(zhuǎn)Profinet網(wǎng)關(guān):破解掃碼<b class='flag-5'>槍</b>高速通訊的關(guān)鍵樞紐

    RS232與Profinet轉(zhuǎn)換!掃碼新玩法揭秘

    本文探討了如何通過RS232轉(zhuǎn)Profinet技術(shù),實現(xiàn)1200PLC與掃碼之間的通信,幫助構(gòu)建高效、穩(wěn)定的自動化生產(chǎn)系統(tǒng)。RS232是種低成本、易用的串行通信協(xié)議,但傳輸速度較慢,且傳輸距離短。
    的頭像 發(fā)表于 03-25 12:31 ?758次閱讀
    RS232與Profinet轉(zhuǎn)換!掃碼<b class='flag-5'>槍</b>新玩法揭秘

    筋膜語音播報方案-自定義語音更換WT588F芯片系列方案

    隨著科技的飛速發(fā)展和人們生活品質(zhì)的提升,筋膜作為種高效便捷的按摩工具,已逐漸成為健身愛好者和運動員的必備之選。然而,傳統(tǒng)筋膜大多僅依靠顯示屏或指示燈來展示工作狀態(tài)和模式,這對于視力不佳的用戶
    的頭像 發(fā)表于 03-13 14:04 ?667次閱讀