iT邦幫忙

0

python cuda平行運算加速問題求解

  • 分享至 

  • xImage
    for index, lm in enumerate(results.pose_landmarks.landmark):
        # 保存每幀圖像的寬、高、通道數
        h, w, c = img.shape
        
        # 得到的關鍵點坐標x/y/z/visibility都是比例坐標,在[0,1]之間
        # 轉換為像素坐標(cx,cy),圖像的實際長寬乘以比例,像素坐標一定是整數
        #cx, cy , cz, v= int(lm.x * w), int(lm.y * h), int(lm.z * w), lm.visibility
        x, y = int(lm.x * w), int(lm.y * h)

        # 打印坐標信息
        #print(index, cx, cy, cz, v)

        # 保存坐標信息
        #lmlist.append((index, cx, cy, cz, v))
        # 保存左手腕左腳踝座標
        points.append((int(x), int(y)))
        #print(index)
        #print(points)
        if(index == 32):
            #print(index)
            #print(points)
            lslw.append(distance(points[11], points[15]))  # 計算兩點距離
            lsla.append(distance(points[11], points[27]))  # 計算兩點距離
            lwla.append(distance(points[15], points[27]))  # 計算兩點距離
            rsrw.append(distance(points[12], points[16]))  # 計算兩點距離
            rsra.append(distance(points[12], points[28]))  # 計算兩點距離
            rwra.append(distance(points[16], points[28]))  # 計算兩點距離
            lwrw.append(distance(points[15], points[26]))  # 計算兩點距離
            lara.append(distance(points[27], points[28]))  # 計算兩點距離
            lsrw.append(distance(points[11], points[16]))  # 計算兩點距離
            lsra.append(distance(points[11], points[28]))  # 計算兩點距離
            lwra.append(distance(points[15], points[28]))  # 計算兩點距離
            lwrs.append(distance(points[15], points[12]))  # 計算兩點距離
            lars.append(distance(points[27], points[12]))  # 計算兩點距離
            larw.append(distance(points[27], points[16]))  # 計算兩點距離
            lels.append(distance(points[13], points[11]))  # 計算兩點距離
            lelw.append(distance(points[13], points[15]))  # 計算兩點距離
            lela.append(distance(points[13], points[27]))  # 計算兩點距離
            lers.append(distance(points[13], points[12]))  # 計算兩點距離
            lerw.append(distance(points[13], points[16]))  # 計算兩點距離
            lere.append(distance(points[13], points[14]))  # 計算兩點距離
            lera.append(distance(points[13], points[28]))  # 計算兩點距離
            rels.append(distance(points[14], points[11]))  # 計算兩點距離
            relw.append(distance(points[14], points[15]))  # 計算兩點距離
            rela.append(distance(points[14], points[27]))  # 計算兩點距離
            rers.append(distance(points[14], points[12]))  # 計算兩點距離
            rerw.append(distance(points[14], points[16]))  # 計算兩點距離
            rera.append(distance(points[14], points[28]))  # 計算兩點距離
            lsrs.append(distance(points[11], points[12]))  # 雙肩

            np.savetxt(path1 + '\關節點' + '\左肩左手' + '\z' + 'lslw.csv', lslw, fmt='%s', delimiter=',')  # 儲存資料
            np.savetxt(path1 + '\關節點' + '\左肩左腳' + '\z' + 'lsla.csv', lsla, fmt='%s', delimiter=',')  # 儲存資料
            np.savetxt(path1 + '\關節點' + '\左手左腳' + '\z' + 'lwla.csv', lwla, fmt='%s', delimiter=',')  # 儲存資料
            np.savetxt(path1 + '\關節點' + '\右肩右手' + '\z' + 'rsrw.csv', rsrw, fmt='%s', delimiter=',')  # 儲存資料
            np.savetxt(path1 + '\關節點' + '\右肩右腳' + '\z' + 'rsra.csv', rsra, fmt='%s', delimiter=',')  # 儲存資料
            np.savetxt(path1 + '\關節點' + '\右手右腳' + '\z' + 'rwra.csv', rwra, fmt='%s', delimiter=',')  # 儲存資料
            np.savetxt(path1 + '\關節點' + '\左肩右手' + '\z' + 'lsrw.csv', lsrw, fmt='%s', delimiter=',')  # 儲存資料
            np.savetxt(path1 + '\關節點' + '\左肩右腳' + '\z' + 'lsra.csv', lsra, fmt='%s', delimiter=',')  # 儲存資料
            np.savetxt(path1 + '\關節點' + '\左手右腳' + '\z' + 'lwra.csv', lwra, fmt='%s', delimiter=',')  # 儲存資料
            np.savetxt(path1 + '\關節點' + '\左手右肩' + '\z' + 'lwrs.csv', lwrs, fmt='%s', delimiter=',')  # 儲存資料
            np.savetxt(path1 + '\關節點' + '\左腳右肩' + '\z' + 'lars.csv', lars, fmt='%s', delimiter=',')  # 儲存資料
            np.savetxt(path1 + '\關節點' + '\左腳右手' + '\z' + 'larw.csv', larw, fmt='%s', delimiter=',')  # 儲存資料
            np.savetxt(path1 + '\關節點' + '\左肘左肩' + '\z' + 'lels.csv', lels, fmt='%s', delimiter=',')  # 儲存資料
            np.savetxt(path1 + '\關節點' + '\左肘左手' + '\z' + 'lelw.csv', lelw, fmt='%s', delimiter=',')  # 儲存資料
            np.savetxt(path1 + '\關節點' + '\左肘左腳' + '\z' + 'lela.csv', lela, fmt='%s', delimiter=',')  # 儲存資料
            np.savetxt(path1 + '\關節點' + '\左肘右肩' + '\z' + 'lers.csv', lers, fmt='%s', delimiter=',')  # 儲存資料
            np.savetxt(path1 + '\關節點' + '\左肘右手' + '\z' + 'lerw.csv', lerw, fmt='%s', delimiter=',')  # 儲存資料
            np.savetxt(path1 + '\關節點' + '\左肘右腳' + '\z' + 'lera.csv', lera, fmt='%s', delimiter=',')  # 儲存資料
            np.savetxt(path1 + '\關節點' + '\右肘左肩' + '\z' + 'rels.csv', rels, fmt='%s', delimiter=',')  # 儲存資料
            np.savetxt(path1 + '\關節點' + '\右肘左手' + '\z' + 'relw.csv', relw, fmt='%s', delimiter=',')  # 儲存資料
            np.savetxt(path1 + '\關節點' + '\右肘左腳' + '\z' + 'rela.csv', rela, fmt='%s', delimiter=',')  # 儲存資料
            np.savetxt(path1 + '\關節點' + '\右肘右肩' + '\z' + 'rers.csv', rers, fmt='%s', delimiter=',')  # 儲存資料
            np.savetxt(path1 + '\關節點' + '\右肘右手' + '\z' + 'rerw.csv', rerw, fmt='%s', delimiter=',')  # 儲存資料
            np.savetxt(path1 + '\關節點' + '\右肘右腳' + '\z' + 'rera.csv', rera, fmt='%s', delimiter=',')  # 儲存資料
            np.savetxt(path1 + '\關節點' + '\左肘右腳' + '\z' + 'lera.csv', lera, fmt='%s', delimiter=',')  # 儲存資料
            np.savetxt(path1 + '\關節點' + '\雙肩' + '\z' + 'lsrs.csv', lsrs, fmt='%s', delimiter=',')  # 儲存資料
            np.savetxt(path1 + '\關節點' + '\雙肘' + '\z' + 'lere.csv', lere, fmt='%s', delimiter=',')  # 儲存資料
            np.savetxt(path1 + '\關節點' + '\雙手' + '\z' + 'lwrw.csv', lwrw, fmt='%s', delimiter=',')  # 儲存資料
            np.savetxt(path1 + '\關節點' + '\雙腳' + '\z' + 'lara.csv', lara, fmt='%s', delimiter=',')  # 儲存資料

            np.savetxt(path2 + '\左肘右手' + '\z' + '21.csv', lerw, fmt='%s', delimiter=',')  # 儲存資料1
            np.savetxt(path2 + '\左肩左手' + '\z' + '2.csv', lslw, fmt='%s', delimiter=',')  # 儲存資料1
            np.savetxt(path2 + '\左肩左腳' + '\z' + '2.csv', lsla, fmt='%s', delimiter=',')  # 儲存資料2
            np.savetxt(path2 + '\左手左腳' + '\z' + '2.csv', lwla, fmt='%s', delimiter=',')  # 儲存資料3
            np.savetxt(path2 + '\右肩右手' + '\z' + '2.csv', rsrw, fmt='%s', delimiter=',')  # 儲存資料4
            np.savetxt(path2 + '\右肩右腳' + '\z' + '2.csv', rsra, fmt='%s', delimiter=',')  # 儲存資料5
            np.savetxt(path2 + '\右手右腳' + '\z' + '2.csv', rwra, fmt='%s', delimiter=',')  # 儲存資料6
            np.savetxt(path2 + '\左肩右手' + '\z' + '2.csv', lsrw, fmt='%s', delimiter=',')  # 儲存資料7
            np.savetxt(path2 + '\左肩右腳' + '\z' + '2.csv', lsra, fmt='%s', delimiter=',')  # 儲存資料8
            np.savetxt(path2 + '\左手右腳' + '\z' + '2.csv', lwra, fmt='%s', delimiter=',')  # 儲存資料9
            np.savetxt(path2 + '\左手右肩' + '\z' + '2.csv', lwrs, fmt='%s', delimiter=',')  # 儲存資料10
            np.savetxt(path2 + '\左腳右肩' + '\z' + '2.csv', lars, fmt='%s', delimiter=',')  # 儲存資料11
            np.savetxt(path2 + '\左腳右手' + '\z' + '2.csv', larw, fmt='%s', delimiter=',')  # 儲存資料12
            np.savetxt(path2 + '\左肘左肩' + '\z' + '2.csv', lels, fmt='%s', delimiter=',')  # 儲存資料13
            np.savetxt(path2 + '\左肘左手' + '\z' + '2.csv', lelw, fmt='%s', delimiter=',')  # 儲存資料14
            np.savetxt(path2 + '\左肘左腳' + '\z' + '2.csv', lela, fmt='%s', delimiter=',')  # 儲存資料15
            np.savetxt(path2 + '\左肘右肩' + '\z' + '2.csv', lerw, fmt='%s', delimiter=',')  # 儲存資料16
            np.savetxt(path2 + '\右肘左肩' + '\z' + '2.csv', rels, fmt='%s', delimiter=',')  # 儲存資料17
            np.savetxt(path2 + '\右肘左手' + '\z' + '2.csv', relw, fmt='%s', delimiter=',')  # 儲存資料18
            np.savetxt(path2 + '\右肘左腳' + '\z' + '2.csv', rela, fmt='%s', delimiter=',')  # 儲存資料19
            np.savetxt(path2 + '\右肘右肩' + '\z' + '2.csv', rers, fmt='%s', delimiter=',')  # 儲存資料20
            np.savetxt(path2 + '\右肘右手' + '\z' + '2.csv', rerw, fmt='%s', delimiter=',')  # 儲存資料21
            np.savetxt(path2 + '\右肘右腳' + '\z' + '2.csv', rera, fmt='%s', delimiter=',')  # 儲存資料22
            np.savetxt(path2 + '\左肘右腳' + '\z' + '2.csv', lera, fmt='%s', delimiter=',')  # 儲存資料23
            np.savetxt(path2 + '\雙肩' + '\z' + '2.csv', lsrs, fmt='%s', delimiter=',')  # 儲存資料24
            np.savetxt(path2 + '\雙手' + '\z' + '2.csv', lwrw, fmt='%s', delimiter=',')  # 儲存資料25
            np.savetxt(path2 + '\雙腳' + '\z' + '2.csv', lara, fmt='%s', delimiter=',')  # 儲存資料26
            np.savetxt(path2 + '\雙肘' + '\z' + '2.csv', lere, fmt='%s', delimiter=',')  # 儲存資料27
            # 儲存資料
            #np.savetxt('t.csv', t, fmt='%f', delimiter=',')
            points = []
            times+= 1


        # 在關鍵點上畫圓圈,img畫板,以(cx,cy)為圓心,半徑5,顏色綠色,填充圓圈
        cv2.circle(img, (x,y), 3, (0,255,0), cv2.FILLED)

類似這篇文章https://lulaoshi.info/gpu/python-cuda/streams
想請問各位大神這段程式碼該如何更改?

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
增廣建文
iT邦研究生 5 級 ‧ 2022-10-04 22:03:58

我猜你是要問怎麼用cuda + numba在python做到GPU上的平行化
要處理loop的話可以參考

https://medium.com/@gbadahamza18/exploit-your-gpu-by-parallelizing-your-codes-using-python-2dd8e2215aa8

我要發表回答

立即登入回答