Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

IOError: cannot identify image file './1.png',请问有人遇到吗? #194

Closed
xlvchao opened this issue Dec 30, 2017 · 66 comments
Closed

Comments

@xlvchao
Copy link

xlvchao commented Dec 30, 2017

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'

@xlvchao xlvchao changed the title IOError: cannot identify image file './1.png' IOError: cannot identify image file './1.png',请问有人遇到吗? Dec 30, 2017
@KivyGogh
Copy link

可能有三个情况,1.adb没装,2.没配置adb路径,3.os.system()调用adb失败,返回值是32512,代码中所有adb改成adb所在的路径

@jackliu90s
Copy link

jackliu90s commented Dec 31, 2017

FileNotFoundError: [Errno 2] No such file or directory: './1.png' 怎么解决? adb是可以找到设备的,而且adb安装路径也加入到系统路径里了

@aixuyi
Copy link

aixuyi commented Dec 31, 2017

@jackliu90s 我也是这样,手机是不是没内存卡

@jackliu90s
Copy link

@aixuyi 现在又发现adb找不到设备了。。。刚刚找到了一次,又找不到了~

@jackliu90s
Copy link

@KivyGogh 可以详细说下你的解决方案吗?方案2中配置adb路径怎么做呢?

@jackliu90s
Copy link

@KivyGogh adb找不到设备怎么解决?win10环境,安装的你提供的adb安装包

@835311324
Copy link

同样是找不到png的问题 有什么具体点的解决方法吗,。

@jackliu90s
Copy link

jackliu90s commented Dec 31, 2017

打开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'

@Wenhao-Xu
Copy link

一、Ubuntu环境

  1. 建立或修改文件 ~/.android/adb_usb.ini,在文件开头或末尾添加一行,内容是0x2a45。

  2. 建立或修改文件 /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"

  1. 确保你在用户组"plugdev"
    sudo adduser plugdev

  2. 按下面流程重启udev服务或直接重启PC
    sudo service udev restart

  3. 检查ADB设备是否存在
    adb kill-server
    adb devices

二、Windows XP中文环境

  1. 建立或修改C:\Documents and Settings<你的用户名>.android\adb_usb.ini文件,在该文件中添加一行文本,内容是0x2a45。

  2. 检查ADB设备是否找到(命令行程序中)
    adb kill-server
    adb devices
      
    三、Windows 7中文环境

  3. 建立或修改C:\用户<你的用户名>.android\adb_usb.ini文件,在该文件中添加一行文本,内容是0x2a45。

  4. 检查ADB设备是否找到(命令行程序中)
    adb kill-server
    adb devices

参考文档: http://developer.android.com/tools/device.html

ps:本人魅族pro6plus ,内置光盘里有个这个adb连接的说明文件,我在C盘对应目录创建了这个adb_usb.ini文件,重启adb服务就好了

@835311324
Copy link

可以找到设备但是运行程序还是显示找不到截图

@ainglfish
Copy link

◆将名称中含有adb的文件,和fastboot.exe复制到 c:/windows/system32目录
◆将名称中含有adb的所有文件复制到 c:/windows/system目录
我的是荣耀8,之前用的cd命令一直不行,后来执行上面两步就可以了。

@Wenhao-Xu
Copy link

在设置系统路径后应该就能执行adb了

@WoolJun
Copy link

WoolJun commented Dec 31, 2017

图片那个问题我这边改成这种写法就可以了
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 .')

@F-loat
Copy link
Contributor

F-loat commented Dec 31, 2017

新版本应该没问题了 #288

@F-loat F-loat closed this as completed Dec 31, 2017
@cq674350529
Copy link

首先感谢各位的工作。
安装新版本后貌似还是存在问题(暂时未进行调试查明原因),获取图片采用原来的方式貌似可以。
错误信息如下:

=====
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 .')

@hanxing01015
Copy link

截图部分改成下面代码可以顺利运行,亲测
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 .')

@F-loat
Copy link
Contributor

F-loat commented Dec 31, 2017

电脑操作系统是什么,代码是加了平台判断之后的吗,linux的我暂时不太方便测试

@hanxing01015
Copy link

@F-loat 我用的是Mac

@F-loat
Copy link
Contributor

F-loat commented Dec 31, 2017

mac就更不方便了😂,你们试着调试下,也可能是执行shell命令的那个函数的参数需要修改,这种方式省去了把图片储存在手机上的过程,可以避免不同机型文件路径的差异导致无法获取截图

@F-loat
Copy link
Contributor

F-loat commented Dec 31, 2017

类unix系统和windows系统的换行符不一样,之前有人说去掉替换换行符的步骤mac就可以用了,代码也相应做过修改了,但是我没法测试

@lvusyy
Copy link

lvusyy commented Dec 31, 2017

@F-loat 用 os.sep,python会自动适应的.

@cq674350529
Copy link

@F-loat 在windows上我进行了调试,需要将pull_screenshot()修改为如下内容:

if sys.platform == 'win32':
    screenshot = screenshot.replace(b'\r\r\n', b'\n')

@F-loat
Copy link
Contributor

F-loat commented Dec 31, 2017

@cq674350529 修改后我这边是不行的,win10 + python3

@xinca-liu
Copy link

xinca-liu commented Dec 31, 2017

=====
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 截图

@cq674350529
Copy link

@F-loat 好吧,估计python 2.7 32位和 64位还是存在一些差异。

@F-loat
Copy link
Contributor

F-loat commented Dec 31, 2017

32位的倒没测过,懒得再装一遍了。。

@cq674350529
Copy link

适配问题确实比较繁琐

@KiritoStudio
Copy link

@F-loat @wangshub 经过调试,发现mac下也需要使用\n代替\r\n,需要加入一串判断的代码:
if sys.platform == 'win32' or sys.platform == 'darwin':

@F-loat
Copy link
Contributor

F-loat commented Dec 31, 2017

@KiritoStudio 嗯,这个已经在测试兼容性了,#325,有了结论后会进行更新

@shiqi1717
Copy link

can't open file 'wechat_jump_auto.py': [Errno 2] No such file or directory

@boyrabbit233
Copy link

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)
.......

@msterzhang
Copy link

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()
成功运行

@RichardWeiYang
Copy link

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.

@sfantree
Copy link

sfantree commented Jan 1, 2018

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()

@OrdinaryYZH
Copy link

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'

@frinck
Copy link

frinck commented Jan 1, 2018

tim 20180101133252
这个怎么办啊

@phpervip
Copy link

phpervip commented Jan 1, 2018

大家好!我用的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'

@ly1102
Copy link

ly1102 commented Jan 1, 2018

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。加上去就完美运行了。

@ghost
Copy link

ghost commented Jan 1, 2018

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什么的都已经配置好了,用新的程序就有如上报错,用原先的程序就没事,有没有人知道怎么解决,上面写的太乱了,小白已看蒙

@F-loat
Copy link
Contributor

F-loat commented Jan 1, 2018

最新版应该不会报 cannot identify image file './autojump.png' 这个错误了,最多会提示 暂不支持该机型

@sun2378
Copy link

sun2378 commented Jan 1, 2018

用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 .')

@athosss
Copy link

athosss commented Jan 1, 2018

@KivyGogh 怎么调用adb路径啊?求教

@zzy2017sz
Copy link

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文件放在一个文件夹中

@alex2wong
Copy link

确实是,改成:
if sys.platform == 'win32':
screenshot = screenshot.replace(b'\r\r\n', b'\n')
就好了!!!哦也,现在可以安心地看看源码了

@iNUTTER
Copy link

iNUTTER commented Jan 2, 2018

如果你的脚本无法工作,上报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'

@F-loat
Copy link
Contributor

F-loat commented Jan 2, 2018

@iNUTTER 这个是因为文件被其他进程访问中,所以会删除失败,你先手动删除 autojump.png 试一下,后面我们会再优化

@shangyangyinjiu
Copy link

PS C:\Users\hp\Desktop> python C:\Users\hp\Desktop\wechat_jump_auto.py
请在项目根目录中运行脚本

请在项目根目录中运行脚本,这是哪步错了?
谢谢

@cq674350529
Copy link

@shangyangyinjiu 你的Desktop是项目的根目录?找到wechat_jump_auto.py文件所在的目录,然后运行python wechat_jump_auto.py即可。注意:应该还要依赖config.json文件。

@shangyangyinjiu
Copy link

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
请问这个该怎么解决

@kcisadog
Copy link

kcisadog commented Jan 2, 2018

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..

@msterzhang
Copy link

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这个是代码本身就有问题,昨天查了不少资料,都没有合适的解决方案,希望提交者换一种写法。

@zbl704
Copy link

zbl704 commented Jan 3, 2018

benlongzhu:work_note benlongzhu$ python wechat_jump_auto.py
请在项目根目录中运行脚本

这是什么原因,Mac上操作

已经弄成功了,在修改程序,防腾讯

Repository owner locked as too heated and limited conversation to collaborators Jan 3, 2018
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests