原神自动对话剧情

本文介绍了一种使用Python库如pyautogui和OpenCV实现的原神游戏中的自动对话功能,通过计算屏幕截图与预设图片的均方误差(MSE)来识别对话界面并触发相应操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原神自动对话剧情

  • 视频地址:【原神自动对话剧情,附代码】 https://www.bilibili.com/video/BV1t5411e79J/?share_source=copy_web&vd_source=91103f439a8a41ea0b41d31764b980eb
  • 创建一个文件夹,里面必须包含两个文件,一个是img,里面放着对话的界面,然后需要使用管理员权限运行yuanshen.py
  • 注意分辨率,我的是1920X1080
    在这里插入图片描述

代码

import  pyautogui
import cv2
import numpy as np
import random
import time
import os

def getmse(img1,img2):
    err = np.sum((img1.astype("float") - img2.astype("float")) ** 2)  
    err /= float(img1.shape[0] * img1.shape[1]) 
    return err
def getgray(img,x1,y1,x2,y2):
    img_gray=img[y1:y2,x1:x2]
    return cv2.cvtColor(img_gray, cv2.COLOR_BGR2GRAY)
if __name__=="__main__":
    cwd=os.getcwd()
    mse_1=1000
    mse_2=200
    x1,y1,x2,y2=50,23,158,69 #左上角自动
    x3,y3,x4,y4=945,1031,972,1056 #中下方黄色三角 
    x_1,y_1,x_2,y_2=1274,782,1322,832 #对话框
    gray1_arr=[]
    gray2_arr=[]
    gray3_arr=[]
    for im in os.listdir('./img'):
        img=cv2.imread(os.path.join(cwd,"./img",im))
        gray_1=getgray(img,x1,y1,x2,y2)
        gray_2=getgray(img,x3,y3,x4,y4)
        # gray_3=getgray(img,x_1,y_1,x_2,y_2)
        gray1_arr.append(gray_1)
        gray2_arr.append(gray_2)
        # gray3_arr.append(gray_3)

    # img_33=cv2.imread(os.path.join(cwd,"3.png"))
    # gray_33=
    while True:
        xx=0
        random_delay = random.randint(1,4) 
        screenshot = pyautogui.screenshot()
        screenshot_np=np.array(screenshot)
        img=cv2.cvtColor(screenshot_np,cv2.COLOR_RGB2BGR)

        gray2 = getgray(img,x1,y1,x2,y2)
        img_mes=img[y_1:y_2,x_1:x_2]
        gray_3=getgray(img,x3,y3,x4,y4)
        # 计算MSE  

        for x in gray1_arr:
            err=getmse(x,gray2)
            if err<=mse_1:
                print('1',err)
                pyautogui.click(x3+(x4-x3)//2,y3+(y4-y3)//2)
                pyautogui.click(x_1+(x_2-x_1)//2+50,y_1+(y_2-y_1)//2)
                xx=1
                break
        if xx:
            time.sleep(random_delay)
            continue
        for x in gray2_arr:
            err=getmse(x,gray_3)
            if err<=mse_2:
                print('2',err)
                pyautogui.click(x3+(x4-x3)//2,y3+(y4-y3)//2)
                pyautogui.click(x_1+(x_2-x_1)//2+50,y_1+(y_2-y_1)//2)
                break

        time.sleep(random_delay)
    需要调试留言
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值