You can use the human body detection feature to detect all human bodies in an image and obtain their position frames and confidence levels.
Scenarios
Pedestrian detection: Locate pedestrians in images using the human body detection feature.
Path tracking: Analyze pedestrian behavior using the human body detection and path tracking features.
Human body counting: Count the number of people in images using the human body detection feature for purposes such as pedestrian volume analysis and safety assurance.
How to use
Prerequisites
You have created a bucket in OSS and uploaded the files to be processed to the bucket.
You have created and mapped an IMM Project. You can map the project by using the OSS console or by calling an API operation. The IMM Project must be in the same region as the bucket.
Human body detection
The following code provides examples of human body detection using OSS SDKs for common programming languages. You can configure the parameters based on your business requirements.
Java
OSS SDK for Java 3.17.4 or later is required.
import com.aliyun.oss.ClientBuilderConfiguration;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.OSSObject;
import com.aliyun.oss.model.GetObjectRequest;
import com.aliyuncs.exceptions.ClientException;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
public class Demo {
public static void main(String[] args) throws ClientException, ClientException {
// Specify the endpoint of the region in which the bucket is located.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Specify the region of the endpoint. Example: cn-hangzhou.
String region = "cn-hangzhou";
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Specify the name of the bucket.
String bucketName = "examplebucket";
// If the image is stored in the root directory of the bucket, enter the image name. If the image is not stored in the root directory of the bucket, you must specify the full path of the image. Example: exampledir/example.jpg.
String key = "example.jpg";
// Create an OSSClient instance.
// Call the shutdown method to release resources when the OSSClient is no longer in use.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// Create a processing instruction for human body detection.
GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key);
getObjectRequest.setProcess("image/bodies");
// Use the getObject method, and pass the processing instruction.
OSSObject ossObject = ossClient.getObject(getObjectRequest);
// Read and display the query results.
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = ossObject.getObjectContent().read(buffer)) != -1) {
baos.write(buffer, 0, bytesRead);
}
String imageBodies = baos.toString("UTF-8");
System.out.println("Image Bodies:");
System.out.println(imageBodies);
} catch (IOException e) {
System.out.println("Error: " + e.getMessage());
} finally {
// Shut down the OSSClient instance.
ossClient.shutdown();
}
}
}Python
OSS SDK for Python 2.18.4 or later is required.
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
# Specify the ID of the Alibaba Cloud region in which the bucket is located.
region = 'cn-hangzhou'
bucket = oss2.Bucket(auth, endpoint, 'examplebucket', region=region)
# If the image is stored in the root directory of the bucket, enter the name of the image. If the image is not stored in the root directory of the bucket, you must specify the full path of the image. Example: exampledir/example.jpg.
key = 'example.jpg'
# Create a processing instruction for human body detection.
process = 'image/bodies'
try:
# Use the process parameter of the get_object method to pass the processing instruction.
result = bucket.get_object(key, process=process)
# Read and display the query results.
image_bodies = result.read().decode('utf-8')
print("Image Bodies:")
print(image_bodies)
except oss2.exceptions.OssError as e:
print("Error:", e)Go
OSS SDK for Go 3.0.2 or later is required.
package main
import (
"fmt"
"io"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// Obtain the temporary access credentials from the environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Create an OSSClient instance.
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint.
// Specify the ID of the Alibaba Cloud region in which the bucket is located. Example: cn-hangzhou.
client, err := oss.New("https://oss-cn-hangzhou.aliyuncs.com", "", "", oss.SetCredentialsProvider(&provider), oss.AuthVersion(oss.AuthV4), oss.Region("cn-hangzhou"))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Specify the name of the bucket. Example: examplebucket.
bucketName := "examplebucket"
bucket, err := client.Bucket(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// If the image is stored in the root directory of the bucket, enter the name of the image. If the image is not stored in the root directory of the bucket, you must specify the full path of the image. Example: exampledir/example.jpg.
// Create a processing instruction for human body detection by using the oss.Process method.
body, err := bucket.GetObject("example.jpg", oss.Process("image/bodies"))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
defer body.Close()
data, err := io.ReadAll(body)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Println("data:", string(data))
}PHP
OSS SDK for PHP 2.7.0 or later is required.
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
require_once __DIR__ . '/../vendor/autoload.php';
}
use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
try {
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
$provider = new EnvironmentVariableCredentialsProvider();
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
$endpoint = 'https://oss-cn-hangzhou.aliyuncs.com';
// Specify the name of the bucket. Example: examplebucket.
$bucket = 'examplebucket';
// If the image is stored in the root directory of the bucket, enter the name of the image. If the image is not stored in the root directory of the bucket, you must specify the full path of the image. Example: exampledir/example.jpg.
$key = 'example.jpg';
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
// Specify the ID of the Alibaba Cloud region in which the bucket is located.
"region" => "cn-hangzhou"
);
$ossClient = new OssClient($config);
// Create a processing instruction for human body detection.
$options[$ossClient::OSS_PROCESS] = "image/bodies";
$result = $ossClient->getObject($bucket,$key,$options);
var_dump($result);
} catch (OssException $e) {
printf($e->getMessage() . "\n");
return;
}Parameters
Name of the operation: image/bodies
Parameter in the request
Parameter | Type | Required | Description | Example |
sen | int | No | The sensitivity of the detection results. The higher the sensitivity, the more detected human bodies. Valid values: 0 to 100. Default value: 60. | 50 |
Parameters in the response
For more information, see DetectImageBodies - Detect human bodies in images.
Related APIs
If your business requires a high level of customization, you can directly call RESTful APIs. To directly call an API, you must include the signature calculation in your code. For more information about how to calculate the Authorization header, see (Recommended) Include a V4 signature.
You can process images by adding the x-oss-process parameter to the GetObject operation. For more information, see GetObject.
Example 1
Sample request
GET /example.jpg?x-oss-process=image/bodies HTTP/1.1
Host: image-demo.oss-cn-hangzhou.aliyuncs.com
Date: Fri, 21 Jul 2023 08:49:07 GMT
Authorization: SignatureValueSample response
HTTP/1.1 200 OK
Server: AliyunOSS
Date: Fri, 21 Jul 2023 08:49:09 GMT
Content-Type: application/json;charset=utf-8
Content-Length: 145
Connection: keep-alive
x-oss-request-id: 64BA4685A645AE37313CBD14
ETag: "2CE2EA370531B7CC1D23BE6015CF5DA5"
Last-Modified: Mon, 10 Jul 2023 13:07:30 GMT
x-oss-object-type: Normal
x-oss-hash-crc64ecma: 13420962247653419692
x-oss-storage-class: Standard
x-oss-ec: 0048-00000104
Content-Disposition: attachment
x-oss-force-download: true
x-oss-server-time: 329
{
"RequestId": "58C0F6A4-7B26-5E22-9C60-EFF90E2082ED",
"Bodies": [
{
"Confidence": 0.733,
"Boundary": {
"Left": 115,
"Top": 97,
"Height": 103,
"Width": 63
}
}
]
}Example 2
Sample request
In this example, the value of the sen parameter is 50.
GET /example.jpg?x-oss-process=image/bodies,sen_50 HTTP/1.1
Host: image-demo.oss-cn-hangzhou.aliyuncs.com
Date: Fri, 21 Jul 2023 08:54:54 GMT
Authorization: SignatureValueSample response
HTTP/1.1 200 OK
Server: AliyunOSS
Date: Fri, 21 Jul 2023 08:54:56 GMT
Content-Type: application/json;charset=utf-8
Content-Length: 145
Connection: keep-alive
x-oss-request-id: 64BA47E05B40CC33396D6AA3
ETag: "2CE2EA370531B7CC1D23BE6015CF5DA5"
Last-Modified: Mon, 10 Jul 2023 13:07:30 GMT
x-oss-object-type: Normal
x-oss-hash-crc64ecma: 13420962247653419692
x-oss-storage-class: Standard
x-oss-ec: 0048-00000104
Content-Disposition: attachment
x-oss-force-download: true
x-oss-server-time: 394
{
"RequestId": "E9BDE106-1436-5077-9F6E-65D81DC6FEC8",
"Bodies": [
{
"Confidence": 0.733,
"Boundary": {
"Left": 115,
"Top": 97,
"Height": 103,
"Width": 63
}
},
{
"Confidence": 0.732,
"Boundary": {
"Left": 214,
"Top": 121,
"Height": 86,
"Width": 63
}
},
{
"Confidence": 0.656,
"Boundary": {
"Left": 63,
"Top": 102,
"Height": 100,
"Width": 82
}
}
]
}Billing
During human body detection, the following billing items are generated on both OSS and IMM sides because the IMM service is called:
OSS side: For detailed pricing, see OSS Pricing
API
Billing item
Description
GetObject
GET requests
You are charged request fees based on the number of successful requests.
Outbound traffic over Internet
If you call the GetObject operation by using a public endpoint, such as oss-cn-hangzhou.aliyuncs.com, or an acceleration endpoint, such as oss-accelerate.aliyuncs.com, you are charged fees for outbound traffic over the Internet based on the data size.
Infrequent Access Data Retrieval Capacity
If IA objects are retrieved, you are charged IA data retrieval fees based on the size of retrieved IA data.
Capacity for Direct Data Retrieval from Archive
If Archive objects in a bucket for which real-time access is enabled are retrieved, you are charged Archive data retrieval fees based on the size of retrieved Archive objects.
Transfer acceleration
If you enable transfer acceleration and use an acceleration endpoint to access your bucket, you are charged transfer acceleration fees based on the data size.
HeadObject
GET requests
You are charged request fees based on the number of successful requests.
IMM side: For detailed pricing, see IMM billing items
ImportantStarting from 11:00 UTC+8 on July 28, 2025, the IMM human body detection service will be upgraded from a free model to a paid model. The specific billing item is ImageDetect. For more information, see IMM billing adjustment announcement.
API
Billing item
Description
DetectImageBodies
ImageDetect
You are charged request fees based on the number of successful requests.
Usage notes
Human body detection supports only synchronous processing by calling the x-oss-process operation.
Anonymous access will be denied.