B-SOiD 系统运行报错全记录

B-SOiD V2.0网页first running step

报错一:IndexError: list index out of range

IndexError: list index out of range
Traceback:

File "/home/user/anaconda3/envs/bsoid_v2/lib/python3.8/site-packages/streamlit/script_runner.py", line 332, in _run_script
    exec(code, module.__dict__)
File "/home/user/B-SOID/bsoid_app.py", line 42, in 
    processor.compile_data()
File "/home/user/B-SOID/bsoid_app/data_preprocess.py", line 88, in compile_data
    file0_df = pd.read_csv(data_files[0], low_memory=False)

问题分析:

        最开始我在社区找到回答:(摘自社区回答)

"This is a bug/misfeature that we worked on correcting in later versions of Streamlit since it was confusing to people. If you want to use Streamlit 0.70 per your requirements.txt file, then add the line of code I posted above.

However, if you upgrade Streamlit to the newest version (0.73.1 as of this post), your app will work as-is (I tested this scenario locally as well)."

        社区里的是2021年的回答,所以我就直接更到最新(没找到0.73.1的版本)然后出现了新问题

"PackageNotInstalledError: Package is not installed in prefix."

        于是我又找了一些answers,除了comments都说still error的回答外,找到了在base环境更新conda和使用pip下载streamlit新版本的方法:(摘自社区回答)

1)I met the same problem in my window1 10. pls change the env to base, because the package "conda" only can be updated in base. regards

2)When a package is installed via pip in a conda env, and updated via conda, it results in the same error message shown. In this case, use

pip install package_name --upgrade

This solved my problem.

        由于conda我已经更新过了所以没有再去更新,直接使用了pip下载

        然后streamlit下载了最新的1.71.0把原来的0.71.0卸载了

        但是更新最新版本的方法并没有用反而连导入都直接报错,无法将caching from streamlit成功import,此时卸载这个版本装回原来的版本后导入streamlit函数的命令还是一直报错

ImportError: cannot import name 'caching' from 'streamlit' 
(/home/user/anaconda3/envs/bsoid_v2/lib/python3.8/site-packages/streamlit/__init__.py)

        所以干脆把环境删了重新用yaml装了一遍,折腾一圈回到了起点。

        然后我们排除了包的问题,回到代码里,我这里显示的报错里data_files[0]就超出索引了,说明它是空的,即pandas根本没有读取到这个csv文件。

         最后证明不是包冲突问题,不是版本问题,代码和环境都没有什么问题,有问题的是官方网站放置的步骤视频。

解决方法:

        官方的视频里出现了演示步骤和图片说明不一的情况。

        在官方网站里图片表述内容里,其在B-SOiD Project文件夹下分别创建session 1,session 2和output文件夹,但是在generate video snippets步骤的演示视频里他把创建的session 1,session 2又放到了041919的文件夹,与output并列作为B-SOiD Project的文件夹,相当于我的video.mp4和.csv文件在041919的子文件夹里。且在“Select the pose estimate root directory containing 1 or more xxx.csv containing sub-directories.“步骤中只选到了/041919/这个文件夹,即选到video.mp4和.csv所在文件夹的上级文件夹。

        因此,按照视频指导往下做了,那么你只需要选择到子文件夹,即video.mp4和.csv所在文件夹。

报错二:Error: ffprobe error (see stderr output for detail)

Error: ffprobe error (see stderr output for detail)
Traceback:

File "/home/user/anaconda3/envs/bsoid_v2/lib/python3.8/site-packages/streamlit/script_runner.py", line 332, in _run_script
    exec(code, module.__dict__)
File "/home/user/B-SOID/bsoid_app.py", line 71, in 
    creator.main()
File "/home/user/B-SOID/bsoid_app/video_creator.py", line 268, in main
    self.setup()
File "/home/user/B-SOID/bsoid_app/video_creator.py", line 115, in setup
    probe = ffmpeg.probe(os.path.join(self.vid_dir, self.vid_file))
File "/home/user/anaconda3/envs/bsoid_v2/lib/python3.8/site-packages/ffmpeg/_probe.py", line 23, in probe
    raise Error('ffprobe', out, err)

错误位置:

        切割帧之前Generate video snippets for interpretation

B-SOiD 系统运行报错全记录_第1张图片问题分析:

        造成这个错误的原因有两种:

        (问题一)

        一种是没有选择正确的要求文件(如上图所示),注意第一栏选取你的测试csv或其它格式的文件,第二栏选择.mp4/.avi文件本身。

        (问题二)

        如果你使用的是Ubuntu系统,并且你完全按照正确的格式在走,那么问题就出现ffmpeg包

        首先从代码中debug,到最后只剩下三行代码

import ffmpeg
import os
vid_dir = '/home/user/B-SOID/B-SOiD/Session 1'
vid_file = 'trial1_video.mp4'
file_path = os.path.join(vid_dir, vid_file)
ffmpeg.probe(file_path)

         那么只剩下一个可能原因就是ffmpeg包有问题,即包的版本问题

         在社区里找到了作者关于ffmpeg的相关回答,即问题在与ffmpeg和ffmpeg-python在" import ffmpeg” 这一语句下都会被调用,但是需要调用的是ffmpeg-python.

解决方法:

         卸载ffmpeg

pip uninstall ffmpeg

        安装ffmpeg-python

pip install ffmpeg-python

报错三:IndexError: list index out of range

错误代码:

IndexError: list index out of range
Traceback:

File "/home/user/anaconda3/envs/bsoid_v2/lib/python3.8/site-packages/streamlit/script_runner.py", line 332, in _run_script
    exec(code, module.__dict__)
File "/home/user/B-SOID/bsoid_app.py", line 71, in 
    creator.main()
File "/home/user/B-SOID/bsoid_app/video_creator.py", line 273, in main
    self.create_videos()
File "/home/user/B-SOID/bsoid_app/video_creator.py", line 214, in create_videos
    create_labeled_vid(fs_labels[0], int(self.min_frames), int(self.number_examples), int(self.out_fps),
File "/home/user/B-SOID/bsoid_app/bsoid_utilities/videoprocessing.py", line 28, in create_labeled_vid
    frame = cv2.imread(os.path.join(frame_dir, images[0]))

错误位置:extract frames结束,predict labels之后

B-SOiD 系统运行报错全记录_第2张图片

 解决方法:

        先选择“No”进行切割储存frames,再选择“Yes”进行图像处理

报错四: 切割视频一直在“creating gifts from mp4s”长时间不动(如下图)

B-SOiD 系统运行报错全记录_第3张图片

解决方法:

        如果你用的是.mp4文件,找到有fourcc的.py文件找到fourcc这一行(如下图)

    # fourcc = cv2.VideoWriter_fourcc('H', '2', '6', '4')
    fourcc = cv2.VideoWriter_fourcc(*'avc1')
    frame = cv2.imread(os.path.join(frame_dir, images[0]))

        把括号里的内容(*'avc1')改成(*'mp4v')即可!

        这就是我遇到的所有报错,官网视频确实已经常用心了,但是一段的一段的可能不太熟悉系统的操作者会遗漏步骤,在B站同步上线了全程详细操作步骤讲解,有兴趣可以去看一下。

你可能感兴趣的:(B-SOiD,行为分析,python,ubuntu,随机森林)