qq_24801433 2023-05-02 10:07 采纳率: 60%
浏览 22

树莓派虚拟键盘和别人的不一样

为啥我树莓派安装的虚拟键盘

sudo apt-get install matchbox-keyboard


和别人的不一样

img

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-05-03 00:25
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7778822
    • 这篇博客你也可以参考下:一文读懂交叉熵和最大似然的关系及在人脸识别中的应用
    • 除此之外, 这篇博客: 常见公开人脸数据集的获取和制作自定义人脸数据集中的 第一阶段 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

      爬取人脸图片的核心思路就是获取中国明星的名字,然后使用明星的名字作为图片搜索的关键字进行获取图片,然后删除下载过程损坏的图片和没有包含人脸的图片,或者过多人脸的图片(我们只保存一张图片只包含一张人脸的图片)。

      首先获取中国明星的名字,该功能主要在get_star_name.py中实现。获取明显的名字核心代码如下,获取的名字不能保证百分之百正确,所以可能需要手动去检查。

      # 获取明星的名字并保存到文件中
      def get_page(pages, star_name):
          params = []
          # 设置访问的请求头,包括分页数和明星所在的地区
          for i in range(0, 12 * pages + 12, 12):
              params.append({
                  'resource_id': 28266,
                  'from_mid': 1,
                  'format': 'json',
                  'ie': 'utf-8',
                  'oe': 'utf-8',
                  'query': '明星',
                  'sort_key': '',
                  'sort_type': 1,
                  'stat0': '',
                  'stat1': star_name,
                  'stat2': '',
                  'stat3': '',
                  'pn': i,
                  'rn': 12})
      
          # 请求的百度接口获取明星的名字
          url = 'https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php'
      
          x = 0
          # 根据请求头下载明星的名字
          for param in params:
              try:
                  # 获取请求数据
                  res = requests.get(url, params=param, timeout=50)
                  # 把网页数据转换成json数据
                  js = json.loads(res.text)
                  # 获取json中的明星数据
                  results = js.get('data')[0].get('result')
              except AttributeError as e:
                  print('【错误】出现错误:%s' % e)
                  continue
      
              # 从数据中提取明星的名字
              for result in results:
                  img_name = result['ename']
                  f.write(img_name + '\n',)
      

      然后根据明星的名字从网上下载图片,该功能主要在download_image.py中实现,以下就是下载图片的核心代码片段。

      # 获取百度图片下载图片
      def download_image(key_word, download_max):
          download_sum = 0
          str_gsm = '80'
          # 把每个明显的图片存放在单独一个文件夹中
          save_path = 'star_image' + '/' + key_word
          if not os.path.exists(save_path):
              os.makedirs(save_path)
          while download_sum < download_max:
              # 下载次数超过指定值就停止下载
              if download_sum >= download_max:
                  break
              str_pn = str(download_sum)
              # 定义百度图片的路径
              url = 'http://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&' \
                    'word=' + key_word + '&pn=' + str_pn + '&gsm=' + str_gsm + '&ct=&ic=0&lm=-1&width=0&height=0'
              try:
                  # 获取当前页面的源码
                  result = requests.get(url, timeout=30).text
                  # 获取当前页面的图片URL
                  img_urls = re.findall('"objURL":"(.*?)",', result, re.S)
                  if len(img_urls) < 1:
                      break
                  # 把这些图片URL一个个下载
                  for img_url in img_urls:
                      # 获取图片内容
                      img = requests.get(img_url, timeout=30)
                      img_name = save_path + '/' + str(uuid.uuid1()) + '.jpg'
                      # 保存图片
                      with open(img_name, 'wb') as f:
                          f.write(img.content)
                      with open('image_url_list.txt', 'a+', encoding='utf-8') as f:
                          f.write(img_name + '\t' + img_url + '\n')
                      download_sum += 1
                      if download_sum >= download_max:
                          break
              except Exception as e:
                  download_sum += 1
                  continue
      

      下载图片完成之后,有很多损坏的图片,需要把这些损坏的图片删除,该功能主要在delete_error_image.py实现。下面是删除损坏图片的核心代码片段。

      # 删除不是JPEG或者PNG格式的图片
      def delete_error_image(father_path):
          # 获取父级目录的所有文件以及文件夹
          image_paths = []
          for root, dirs, files in os.walk(father_path):
              for file in files:
                  image_paths.append(os.path.join(root, file))
          for image in tqdm(image_paths):
              try:
                  # 获取图片的类型
                  image_type = imghdr.what(image)
                  # 如果图片格式不是JPEG同时也不是PNG就删除图片
                  if image_type is not 'jpeg' and image_type is not 'png':
                      os.remove(image)
                      continue
                  # 删除灰度图
                  img = numpy.array(Image.open(image))
                  if len(img.shape) is 2:
                      os.remove(image)
              except:
                  os.remove(image)
      

      下载的图片中可能没有人脸,或者包含多张人脸,所以我们要把这些图片删除掉,该功能主要在delete_more_than_one.py中实现。删除没有人脸或者过多人脸图片的关键代码片段如下。

      # 删除两个人脸以上的图片或者没有人脸的图片
      def delete_image(result, image_path):
          try:
              face_num = int(result['result']['face_num'])
              if face_num is not 1:
                  os.remove(image_path)
              else:
                  face_type = result['result']['face_list'][0]['face_type']['type']
                  probability = result['result']['face_list'][0]['face_type']['probability']
                  if face_type == 'cartoon' and probability > 0.8:
                      os.remove(image_path)
          except:
              os.remove(image_path)
      
    • 您还可以看一下 董洪伟老师的算法设计与分析课程中的 动态规划很简单-零钱问题、机器人走法小节, 巩固相关知识点

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 5月2日

悬赏问题

  • ¥100 求懂行的大ge给小di解答下!
  • ¥15 pcl运行在qt msvc2019环境运行效率低于visual studio 2019
  • ¥15 MAUI,Zxing扫码,华为手机没反应。可提高悬赏
  • ¥15 python运行报错 ModuleNotFoundError: No module named 'torch'
  • ¥100 华为手机私有App后台保活
  • ¥15 sqlserver中加密的密码字段查询问题
  • ¥20 有谁能看看我coe文件到底哪儿有问题吗?
  • ¥20 我的这个coe文件到底哪儿出问题了
  • ¥15 matlab使用自定义函数时一直报错输入参数过多
  • ¥15 设计一个温度闭环控制系统