IOError: cannot identify image file './1.png',请问有人遇到吗?
xlvchao opened this issue · 66 comments
Traceback (most recent call last):
File "C:/Users/lvchao/Desktop/wechat_jump_game/wechat_jump_auto.py", line 176, in
main()
File "C:/Users/lvchao/Desktop/wechat_jump_game/wechat_jump_auto.py", line 163, in main
im = Image.open("./1.png")
File "D:\Tools\Anaconda2\lib\site-packages\PIL\Image.py", line 2572, in open
% (filename if filename else fp))
IOError: cannot identify image file './1.png'
可能有三个情况,1.adb没装,2.没配置adb路径,3.os.system()调用adb失败,返回值是32512,代码中所有adb改成adb所在的路径
FileNotFoundError: [Errno 2] No such file or directory: './1.png' 怎么解决? adb是可以找到设备的,而且adb安装路径也加入到系统路径里了
@jackliu90s 我也是这样,手机是不是没内存卡
@aixuyi 现在又发现adb找不到设备了。。。刚刚找到了一次,又找不到了~
@KivyGogh 可以详细说下你的解决方案吗?方案2中配置adb路径怎么做呢?
@KivyGogh adb找不到设备怎么解决?win10环境,安装的你提供的adb安装包
同样是找不到png的问题 有什么具体点的解决方法吗,。
打开360手机助手可以adb advices找到设备了,但依然找不到截图。。。但是手机根目录里有这个截图了
Traceback (most recent call last):
File "D:\Download\wechat_jump_game-master\wechat_jump_auto.py", line 173, in
main()
File "D:\Download\wechat_jump_game-master\wechat_jump_auto.py", line 160, in main
im = Image.open("./1.png")
File "C:\Users\Liu Xin\AppData\Local\Programs\Python\Python35\lib\site-packages\PIL\Image.py", line 2530, in open
fp = builtins.open(filename, "rb")
FileNotFoundError: [Errno 2] No such file or directory: './1.png'
一、Ubuntu环境
-
建立或修改文件 ~/.android/adb_usb.ini,在文件开头或末尾添加一行,内容是0x2a45。
-
建立或修改文件 /etc/udev/rules.d/51-android.rules
2.1 修改文件权限:
sudo chmod a+rx /etc/udev/rules.d/51-android.rules
2.2 在文件中添加一行内容:
SUBSYSTEM=="usb", ATTR{idVendor}=="2a45", MODE="0666", GROUP="plugdev"
-
确保你在用户组"plugdev"
sudo adduser plugdev -
按下面流程重启udev服务或直接重启PC
sudo service udev restart -
检查ADB设备是否存在
adb kill-server
adb devices
二、Windows XP中文环境
-
建立或修改C:\Documents and Settings<你的用户名>.android\adb_usb.ini文件,在该文件中添加一行文本,内容是0x2a45。
-
检查ADB设备是否找到(命令行程序中)
adb kill-server
adb devices
三、Windows 7中文环境 -
建立或修改C:\用户<你的用户名>.android\adb_usb.ini文件,在该文件中添加一行文本,内容是0x2a45。
-
检查ADB设备是否找到(命令行程序中)
adb kill-server
adb devices
参考文档: http://developer.android.com/tools/device.html
ps:本人魅族pro6plus ,内置光盘里有个这个adb连接的说明文件,我在C盘对应目录创建了这个adb_usb.ini文件,重启adb服务就好了
可以找到设备但是运行程序还是显示找不到截图
◆将名称中含有adb的文件,和fastboot.exe复制到 c:/windows/system32目录
◆将名称中含有adb的所有文件复制到 c:/windows/system目录
我的是荣耀8,之前用的cd命令一直不行,后来执行上面两步就可以了。
在设置系统路径后应该就能执行adb了
图片那个问题我这边改成这种写法就可以了
def pull_screenshot():
flag = os.system('adb shell /system/bin/screencap -p /mnt/sdcard/1.png')
if flag == 1:
print('请安装ADB并配置环境变量')
sys.exit()
os.system('adb pull /mnt/sdcard/1.png .')
首先感谢各位的工作。
安装新版本后貌似还是存在问题(暂时未进行调试查明原因),获取图片采用原来的方式貌似可以。
错误信息如下:
=====
Screen: Physical size: 1440x2560
Density: Physical density: 640
DeviceType: SM-N9108V
=====
win32
Traceback (most recent call last):
File "wechat_jump_auto.py", line 235, in <module>
main()
File "wechat_jump_auto.py", line 222, in main
im = Image.open('./autojump.png')
File "D:\Python27\lib\site-packages\PIL\Image.py", line 2572, in open
% (filename if filename else fp))
IOError: cannot identify image file './autojump.png'
获取图片的方式如下:
def pull_screenshot():
flag = os.system('adb shell /system/bin/screencap -p /mnt/sdcard/autojump.png')
os.system('adb pull /mnt/sdcard/autojump.png .')
截图部分改成下面代码可以顺利运行,亲测
def pull_screenshot():
flag = os.system('adb shell /system/bin/screencap -p /mnt/sdcard/autojump.png')
if flag == 1:
print('请安装ADB并配置环境变量')
# sys.exit()
os.system('adb pull /mnt/sdcard/autojump.png .')
电脑操作系统是什么,代码是加了平台判断之后的吗,linux的我暂时不太方便测试
mac就更不方便了😂,你们试着调试下,也可能是执行shell命令的那个函数的参数需要修改,这种方式省去了把图片储存在手机上的过程,可以避免不同机型文件路径的差异导致无法获取截图
类unix系统和windows系统的换行符不一样,之前有人说去掉替换换行符的步骤mac就可以用了,代码也相应做过修改了,但是我没法测试
@F-loat 在windows上我进行了调试,需要将pull_screenshot()修改为如下内容:
if sys.platform == 'win32':
screenshot = screenshot.replace(b'\r\r\n', b'\n')
@cq674350529 修改后我这边是不行的,win10 + python3
=====
Screen: Physical size: 1080x1920
Density: Physical density: 480
DeviceType: NX529J
List of devices attached
37fd833 device
Traceback (most recent call last):
File "wechat_jump_auto.py", line 234, in
main()
File "wechat_jump_auto.py", line 221, in main
im = Image.open('autojump.png')
File "/usr/local/lib/python2.7/dist-packages/PIL/Image.py", line 2572, in open
% (filename if filename else fp))
IOError: cannot identify image file 'autojump.png'
我的也不行 Ubuntu系统
手动可以adb 截图
@F-loat 我的是win10 (64位) + python 2.7 (32位),我这边正常。 可以通过保存一份正常的截图,然后在不进行替换的情况下保存另一份截图,和正常图片做对比,看问题出现在哪里。(我之前是这样调试的)
最开始有个 \r\r\n
,但是第一个 \r
其实应该保留的
win10 + python2.7 还有人能测试下吗
@F-loat 最开始我这边看到的是\r\r\r\n
,所以替换\r\r\n
为\n
,会保留第一个\r
。
版本信息:win10 64位 + python 2.7 32位
@cq674350529 我这边最开始是 \r\r\r\n
,python3,但是python2获取到的不应该是字符串吗
@F-loat python2获取到的是字符串
是什么意思? read()和写文件都是字节流吧,我直接查看的是图片的十六进制内容。
@cq674350529 嗯,那可能是我之前用python2的时候,执行shell的方式有问题
2017-12-31
Load default config
如果你的脚本无法工作,上报issue时请copy如下信息:
Screen: Physical size: 1080x1920
Density: Physical density: 480
DeviceType: NEM-AL10 #华为荣耀5C
如果你的脚本无法工作,上报issue时请copy如下信息:
Screen: Physical size: 1080x1920
Density: Physical density: 480
DeviceType: NEM-AL10 #华为荣耀5C
List of devices attached
3CG6T16924001708 device
Traceback (most recent call last):
File "C:\Users\Zou_Zhiyan\Desktop\something\wechat_jump_auto_raw.py", line 234, in
main()
File "C:\Users\Zou_Zhiyan\Desktop\something\wechat_jump_auto_raw.py", line 221, in main
im = Image.open('./autojump.png')
File "D:\python3_6\lib\site-packages\PIL\Image.py", line 2572, in open
% (filename if filename else fp))
OSError: cannot identify image file './autojump.png'
win10 python 3.6.2
@cq674350529 我装了python2.7.13(64位),目前的版本就可以用
@F-loat 好吧,估计python 2.7 32位和 64位还是存在一些差异。
32位的倒没测过,懒得再装一遍了。。
适配问题确实比较繁琐
@KiritoStudio 嗯,这个已经在测试兼容性了,#325,有了结论后会进行更新
can't open file 'wechat_jump_auto.py': [Errno 2] No such file or directory
win7 64,安卓手机,修改一下main()函数代码就可以用了,不过首先得把adb的系统路径加一下,手动测试两条命令是否能执行。
.....
#pull_screenshot()
os.system('adb shell screencap -p /mnt/sdcard/djump.png')
os.system('adb pull /mnt/sdcard/djump.png')
........
save_debug_creenshot(ts, im, piece_x, piece_y, board_x, board_y)
#backup_screenshot(ts)
.......
def pull_screenshot():
os.system('adb shell screencap -p /sdcard/autojump.png')
os.system('adb pull /sdcard/autojump.png .')
# process = subprocess.Popen('adb shell screencap -p', shell=True, stdout=subprocess.PIPE)
# screenshot = process.stdout.read()
# if sys.platform == 'win32':
# screenshot = screenshot.replace(b'\r\n', b'\n')
# f = open('autojump.png', 'wb')
# f.write(screenshot)
# f.close()
成功运行
current master branch (commit 909edf4) wechat_jump_auto.py can't work on my windows system.
The reason is the pull_screenshot() function can't retrieve screenshot.
def pull_screenshot():
process = subprocess.Popen('adb shell screencap -p', shell=True, stdout=subprocess.PIPE)
screenshot = process.stdout.read()
if sys.platform == 'win32':
screenshot = screenshot.replace(b'\r\n', b'\n')
f = open('autojump.png', 'wb')
f.write(screenshot)
f.close()
Then I replace this implementation with the old version:
os.system('adb shell screencap -p /sdcard/autojump.png')
os.system('adb pull /sdcard/autojump.png .')
This works fine.
I am not familiar with the python process, so not sure how to fix it.
win7+python2.7.14 test succeussfully
def pull_screenshot():
#adb exec-out screencap -p
process = subprocess.Popen('adb exec-out screencap -p', shell=True, stdout=subprocess.PIPE)
screenshot = process.stdout.read()
#if sys.platform == 'win32':
#screenshot = screenshot.replace(b'\r\n', b'\n')
f = open('autojump.png', 'wb')
f.write(screenshot)
f.close()
master 分支7453a90commit
Load config file from E:\work\code\python_Github\wechat_jump_game/config/1920x1080/config.json
(226.15384615384608, 0.06074766355140192, 0.8392156862745098)
(140, 142, 149)
如果你的脚本无法工作,上报issue时请copy如下信息:
**********
Screen: Physical size: 1080x1920
Density: Physical density: 480
DeviceType: MX5
OS: win32
Python: 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:25:58) [MSC v.1500 64 bit (AMD64)]
**********
List of devices attached
******* device
Traceback (most recent call last):
File "wechat_jump_auto.py", line 356, in <module>
main()
File "wechat_jump_auto.py", line 343, in main
im = Image.open('./autojump.png')
File "C:\Python27\lib\site-packages\PIL\Image.py", line 2572, in open
% (filename if filename else fp))
IOError: cannot identify image file './autojump.png'
大家好!我用的mac,报错如下:请问怎么办呢?
bogon:wechat_jump_game-master mac$ python wechat_jump_auto.py
Load config file from /Users/mac/data/wechat_jump_game-master/config/1920x1080/config.json
226.15384615384608 0.06074766355140192 0.8392156862745098
140 142 149
如果你的脚本无法工作,上报issue时请copy如下信息:
Screen: Physical size: 1080x1920
Density: Physical density: 480
DeviceType: BLN-AL10
OS: darwin
Python: 3.5.1 (default, Jan 1 2018, 13:26:08)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)]
List of devices attached
JJRDU16A11007240 device
Traceback (most recent call last):
File "wechat_jump_auto.py", line 356, in
main()
File "wechat_jump_auto.py", line 343, in main
im = Image.open('./autojump.png')
File "/Users/mac/.pyenv/versions/3.5.1/lib/python3.5/site-packages/PIL/Image.py", line 2572, in open
% (filename if filename else fp))
OSError: cannot identify image file './autojump.png'
win10-1709 adb: 27.0.0.0-4455170 手机: 红米4高配 python:2.7.13 3.5.10
我也遇到了IOError: cannot identify image file './autojump.png'
我估计问题是出在
if sys.platform == 'win32':
screenshot = screenshot.replace(b'\r\n', b'\n')
这个地方。我查看图片的十六进制的时候,发现正常截图(通过adb pull)和使用代码截图出来的时候,会看到很多中间会多出来很多00 00的编码。其他地方都一样
更新:
解决了。把代码稍微改一下:
if sys.platform == 'win32':
screenshot = screenshot.replace(b'\r\r\n', b'\n')
查看了下,他是用的\r\r\n分割,代码原始部分只有\r\n,所以还剩下了一个\r。加上去就完美运行了。
File "E:\Python Program\dome2\wechat_jump_auto.py", line 356, in
main()
File "E:\Python Program\dome2\wechat_jump_auto.py", line 343, in main
im = Image.open('./autojump.png')
File "D:\python36\lib\site-packages\PIL\Image.py", line 2572, in open
% (filename if filename else fp))
OSError: cannot identify image file './autojump.png'
我是64位win10的系统,安卓手机,用的python3.6,adb什么的都已经配置好了,用新的程序就有如上报错,用原先的程序就没事,有没有人知道怎么解决,上面写的太乱了,小白已看蒙
最新版应该不会报 cannot identify image file './autojump.png' 这个错误了,最多会提示 暂不支持该机型
用BlueStacks的这里要修改:
def pull_screenshot():
os.system('adb -s 127.0.0.1:5555 shell screencap -p /sdcard/autojump.png')
os.system('adb -s 127.0.0.1:5555 pull /sdcard/autojump.png .')
2018-1-1 更新:
最新版本的已经可以用了,分别测试了华为的三个型号的手机,分别是华为荣耀5C、华为mate9、华为麦芒5,后两者可以运行,大部分落在中心点上;5C的分数进展慢一些,大部分都不在中心点上。
win10 64位+python 3.6.2, adb是根据readme中指示下的
用的默认config:
{
"under_game_score_y": 300,
"press_coefficient": 1.392,
"piece_base_height_1_2": 20,
"piece_body_width": 70
}
最新版的wechat_jump_auto.py
问题解决是default.json 放在config文件夹下,config文件夹和py文件放在一个文件夹中
确实是,改成:
if sys.platform == 'win32':
screenshot = screenshot.replace(b'\r\r\n', b'\n')
就好了!!!哦也,现在可以安心地看看源码了
如果你的脚本无法工作,上报issue时请copy如下信息:
Screen: Physical size: 1080x1920
Density: Physical density: 480
DeviceType: 1605-A01
OS: win32
Python: 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:19:30) [MSC v.1500 32 bit (Intel)]
Traceback (most recent call last):
File "F:/xunleidownloads/wechat_jump_game-master/wechat_jump_game-master/wechat_jump_auto.py", line 238, in
main()
File "F:/xunleidownloads/wechat_jump_game-master/wechat_jump_game-master/wechat_jump_auto.py", line 220, in main
check_screenshot()
File "F:/xunleidownloads/wechat_jump_game-master/wechat_jump_game-master/wechat_jump_auto.py", line 213, in check_screenshot
check_screenshot()
File "F:/xunleidownloads/wechat_jump_game-master/wechat_jump_game-master/wechat_jump_auto.py", line 203, in check_screenshot
os.remove('autojump.png')
WindowsError: [Error 32] : 'autojump.png'
PS C:\Users\hp\Desktop> python C:\Users\hp\Desktop\wechat_jump_auto.py
请在项目根目录中运行脚本
请在项目根目录中运行脚本,这是哪步错了?
谢谢
@shangyangyinjiu 你的Desktop是项目的根目录?找到wechat_jump_auto.py文件所在的目录,然后运行python wechat_jump_auto.py
即可。注意:应该还要依赖config.json文件。
PS C:\Users\hp\Desktop> python C:\Users\hp\Desktop\wechat_jump.py
OpenCV Error: Assertion failed (ssize.width > 0 && ssize.height > 0) in cv::resize, file C:\projects\opencv-python\opencv\modules\imgproc\src\resize.cpp, line 4044
Traceback (most recent call last):
File "C:\Users\hp\Desktop\wechat_jump.py", line 15, in
template = cv2.resize(template, (0, 0), fx=scale, fy=scale)
cv2.error: C:\projects\opencv-python\opencv\modules\imgproc\src\resize.cpp:4044: error: (-215) ssize.width > 0 && ssize.height > 0 in function cv::resize
请问这个该怎么解决
D:\123\wechat_jump_game-master>python wechat_jump_auto.py
error: device '(null)' not found
Load default config
error: device '(null)' not found
error: device '(null)' not found
error: device '(null)' not found
如果你的脚本无法工作,上报issue时请copy如下信息:
Screen:
Density:
DeviceType:
OS: win32
Python: 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:54:40) [MSC v.1900 64 bit (AMD64)]
List of devices attached
error: device '(null)' not found
error: device '(null)' not found
error: device '(null)' not found
Traceback (most recent call last):
File "wechat_jump_auto.py", line 238, in
main()
File "wechat_jump_auto.py", line 225, in main
im = Image.open('./autojump.png')
File "C:\Users\k\AppData\Local\Programs\Python\Python36\lib\site-packages\PIL\Image.py", line 2572, in open
% (filename if filename else fp))
OSError: cannot identify image file './autojump.png'
这样是我手机连电脑的问题吗。。。小米5..
PS C:\Users\hp\Desktop> python C:\Users\hp\Desktop\wechat_jump.py
OpenCV Error: Assertion failed (ssize.width > 0 && ssize.height > 0) in cv::resize, file C:\projects\opencv-python\opencv\modules\imgproc\src\resize.cpp, line 4044
Traceback (most recent call last):
File "C:\Users\hp\Desktop\wechat_jump.py", line 15, in
template = cv2.resize(template, (0, 0), fx=scale, fy=scale)
cv2.error: C:\projects\opencv-python\opencv\modules\imgproc\src\resize.cpp:4044: error: (-215) ssize.width > 0 && ssize.height > 0 in function cv::resize这个是代码本身就有问题,昨天查了不少资料,都没有合适的解决方案,希望提交者换一种写法。
benlongzhu:work_note benlongzhu$ python wechat_jump_auto.py
请在项目根目录中运行脚本
这是什么原因,Mac上操作
已经弄成功了,在修改程序,防腾讯