使用imread URL时如何处理过期的URL链接?

How to deal with expired URL links when using imread URL?

我正在处理 face scrub dataset,其中有一长串 url 图片。

我使用 for 循环来获取这些照片。然而,一些 urls 已经过期所以我的 matlab 代码 return 一个错误说 'Unable to determine the file format.' 但是我认为真正的原因是 url link没有图像了。例如,错误的 url 之一是: http://www.gossip.is/administrator/components/com_n-myndir/uploads/16de47418d69b1c2991731dffaca8a78.jpg

如何识别并忽略此错误,以便我的代码可以继续处理列表的其余部分?如果可以更轻松地解决此问题,我可以改用 R。

您可以实现一个 try/catch 块来捕获(原始的不是它)错误消息并在 link 确实损坏时跳过图像。

当我们使用以下语法时:

try
   A = imread('http://www.gossip.is/cgi-sys/suspendedpage.cgi');

catch ME

 %// Just so we know what the identifier is.  
      ME


end

Matlab 首先尝试读取 url 给出的图像。如果不能,我们要求它 catch 错误消息(实际上是 MException)并执行一些其他适当的操作。

问题是,我们需要知道确切的错误消息是什么,以便在 try/catch 块中识别它。

当我输入上面的代码时,我得到了 ME 的以下结构:

 ME = 

  MException with properties:

    identifier: 'MATLAB:imagesci:imread:fileFormat'
       message: 'Unable to determine the file format.'
         cause: {0x1 cell}
         stack: [2x1 struct]

因此,一旦我们知道产生错误的确切标识符,我们就可以使用 strcmptry/catch 块中查找它。例如使用以下代码:

clear
clc


try
   A = imread('http://www.gossip.is/cgi-sys/suspendedpage.cgi');
catch ME
   if strcmp(ME.identifier,'MATLAB:imagesci:imread:fileFormat')

       disp('Image link broken')

   end

   A = imread('peppers.png');
end 

imshow(A);

Matlab 按预期显示 'Image link broken' 并读取 peppers.png

希望对您有所帮助!