您的位置:首页 > 娱乐 > 八卦 > 温州网站设计服务_百度官网建设_sem是什么专业_日本今日新闻头条

温州网站设计服务_百度官网建设_sem是什么专业_日本今日新闻头条

2025/1/11 13:47:24 来源:https://blog.csdn.net/weixin_44617651/article/details/145026498  浏览:    关键词:温州网站设计服务_百度官网建设_sem是什么专业_日本今日新闻头条
温州网站设计服务_百度官网建设_sem是什么专业_日本今日新闻头条

将 PHP 函数转换为 Python 函数时,需要注意两者之间语法和特性上的差异。

在这里插入图片描述

问题背景

我们试图将下面的 PHP 函数移植到 Python。但是,在执行移植过程中,我们遇到了一个错误:line 189, in detectOnSubImage
rect = rects[i_rect]
IndexError: list index out of range

rects 接受位于 current_node[1] 的列表

rects = current_node[1]

而且,当循环变量 i_rect 大于或等于 rects 列表长度时,while 循环将不退出。

在我们移植这个 PHP 函数到 Python 时遗漏了什么?正确的 Python 代码等价物是什么?

PHP 代码如下:

protected function detectOnSubImage($x, $y, $scale, $ii, $ii2, $w, $iiw, $inv_area)
{$inv_area";$mean  = ($ii[($y+$w)*$iiw + $x + $w] + $ii[$y*$iiw+$x] - $ii[($y+$w)*$iiw+$x] - $ii[$y*$iiw+$x+$w])*$inv_area;$vnorm = ($ii2[($y+$w)*$iiw + $x + $w]+ $ii2[$y*$iiw+$x]- $ii2[($y+$w)*$iiw+$x]- $ii2[$y*$iiw+$x+$w])*$inv_area - ($mean*$mean);$vnorm = $vnorm > 1 ? sqrt($vnorm) : 1;$passed = true;for ($i_stage = 0; $i_stage < count($this->detection_data); $i_stage++) {$stage = $this->detection_data[$i_stage];$trees = $stage[0];$stage_thresh = $stage[1];$stage_sum = 0;for ($i_tree = 0; $i_tree < count($trees); $i_tree++) {$tree = $trees[$i_tree];$current_node = $tree[0];$tree_sum = 0;while ($current_node != null) {$vals = $current_node[0];$node_thresh = $vals[0];$leftval = $vals[1];$rightval = $vals[2];$leftidx = $vals[3];$rightidx = $vals[4];$rects = $current_node[1];$rect_sum = 0;for ($i_rect = 0; $i_rect < count($rects); $i_rect++) {$s = $scale;$rect = $rects[$i_rect];$rx = ($rect[0]*$s+$x)>>0;$ry = ($rect[1]*$s+$y)>>0;$rw = ($rect[2]*$s)>>0;$rh = ($rect[3]*$s)>>0;$wt = $rect[4];$r_sum = ($ii[($ry+$rh)*$iiw + $rx + $rw]+ $ii[$ry*$iiw+$rx]- $ii[($ry+$rh)*$iiw+$rx]- $ii[$ry*$iiw+$rx+$rw])*$wt;$rect_sum += $r_sum;}$rect_sum *= $inv_area;$current_node = null;if ($rect_sum >= $node_thresh*$vnorm) {if ($rightidx == -1) {$tree_sum = $rightval;} else {$current_node = $tree[$rightidx];}} else {if ($leftidx == -1) {$tree_sum = $leftval;} else {$current_node = $tree[$leftidx];}}}$stage_sum += $tree_sum;}if ($stage_sum < $stage_thresh) {return false;}}return true;}
}

Python 代码如下:

def detectOnSubImage(self, x, y, scale, ii, ii2, w, iiw, inv_area):  mean  = (ii[(y+w)*iiw + x + w] + ii[y*iiw+x] - ii[(y+w)*iiw+x] - ii[y*iiw+x+w])*inv_area  vnorm = (ii2[(y+w)*iiw + x + w] + ii2[y*iiw+x] - ii2[(y+w)*iiw+x] - ii2[y*iiw+x+w])*inv_area - (mean*mean)  vnorm = sqrt(vnorm) if vnorm > 1 else 1  #var foo = (test) ? "True" : "False";  #foo = "True" if test else "False"  passed = True  #for i_stage in xrange(0, i_stage < (len(self.detection_data)), i_stage= i_stage+1):  i_stage=0  while i_stage < len(self.detection_data):  i_stage= i_stage+1  stage = self.detection_data[i_stage]  trees = stage[0]  stage_thresh = stage[1]stage_sum = 0#for i_tree in xrange( 0, i_tree < len(trees), i_tree= i_tree+1):i_tree=0while i_tree < len(trees):i_tree= i_tree+1tree = trees[i_tree]current_node = tree[0]tree_sum = 0while (current_node != None):vals = current_node[0]node_thresh = vals[0]leftval = vals[1]rightval = vals[2]leftidx = vals[3]rightidx = vals[4]rects = current_node[1]rect_sum = 0#for i_rect in xrange(0, i_rect < len(rects), i_rect = i_rec+1):i_rect = 0while i_rect < len(rects):i_rect = i_rect+1s = scalerect = rects[i_rect]rx = (rect[0]*s+x)>>0ry = (rect[1]*s+y)>>0rw = (rect[2]*s)>>0rh = (rect[3]*s)>>0wt = rect[4]r_sum = (ii[(ry+rh)*iiw + rx + rw] + ii[ry*iiw+rx] - ii[(ry+rh)*iiw+rx] - ii[ry*iiw+rx+rw])*wtrect_sum = rect_sum + r_sumrect_sum = rect_sum * inv_areacurrent_node = Noneif (rect_sum >= node_thresh*vnorm):if (rightidx == -1):tree_sum = rightvalelse: current_node = tree[rightidx]else:if (leftidx == -1):tree_sum = leftvalelse:current_node = tree[leftidx]stage_sum = stage_sum + tree_sumif (stage_sum < stage_thresh):return falsereturn True

解决方法

  1. 在 Python 版本的 detectOnSubImage 方法中,使用 range() 函数代替 xrange() 函数。
  2. 在 Python 版本的 detectOnSubImage 方法中,使用 while 循环代替 for 循环。
  3. 在 Python 版本的 detectOnSubImage 方法中,使用 if 语句代替 var_dump() 函数。
  4. 在 Python 版本的 detectOnSubImage 方法中,使用 sqrt() 函数计算 vnorm。

代码例子

正确的 Python 代码等价物如下:

def detectOnSubImage(self, x, y, scale, ii, ii2, w, iiw, inv_area):  mean  = (ii[(y+w)*iiw + x + w] + ii[y*iiw+x] - ii[(y+w)*iiw+

如果有更复杂的 PHP 函数逻辑,请提供代码,我可以进一步帮助转换!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com