Sun Position Detection API

Sun Position Detection API - SolarisUPV (also known as Sun Position Recognition API or Sun Position Detector API) is a cross browsers REST API which get a JSON input with a still photo (as base64 encoded string), containing sun on the sky and returns a JSON string which contains a base64 encoded string photo with sun within boundingbox, confidence score, timestamp, vertices for bounding boxes of sun, position of the boundingbox, also pan angle and tilt angle that the solar photovoltaic panel must be rotated and/or tilted with, in order to have the sun centered in the photo and in that way the yield of the solar photovoltaic panel is maximum.
The goal of this API is to detect sun position in a photo taken by a camera relative to the center of the photo and calculate the pan angle and the tilt angle of the solar photovoltaic panel so that rotating and /or tilting the solar panel with these angles the sun will be centered in the photo. Since the camera is positioned on the center of a solar photovoltaic panel as you may see in our example sketches here it may command a single solar panel or an entire farm of solar photovoltaic panels to rotate and/or tilt with the calculated angles so that the entire farm of panels will achieve a maximum yield because the panels are facing the sun with proper angles. The neutral position of the solar panels should be placed towards south if the location is in the northern hemisphere, or towards north if the location of the panels is in the southern hemisphere. Of course, there are some limitations in order to get a higher accuracy. We recommend properly exposed, unobstructed JPEG photos at 1920x1080 (full HD resolution) where ratio between height of the sun position and height of entire picture should be at least 1:15. For ratios like 1:16, 1:17, 1:18 and so on the accuracy is lower and the AI algorithm may not see and read the sun position. Filter may be applied on camera. We do not store pictures. Also, the quality and the angles of the camera are very important and it contribute to a higher reading accuracy. It should have varifocal lenses, high shutter speed, full HD resolution. Please see our example sketches here.

Allthough this Sun Position Detection API (currently we do not offer a Sun Position Detection sdk) is intended for software development and therefore developers, we have also here an Sun Position Detection online application that may be used to check the input and output JSONs of the API. The necessary steps are written below, basically for this real time Sun Position Detection API you send an authorized POST request in JSON format to the API endpoint and you get as JSON response the output as described below through parameters and examples.

This Sun Position Detection API is useful for a photovoltaic solar panels domain like: automatic adjustment position of one or more photovoltaic panels by taking input photos from time to time (usually at each half an hour, or each our) from just a single camera. You own the commercial copyright of the resulted JSON with no additional fee meaning you may use it in your own apps for sale. For using our Sun Position Detection API and/or APP you must create an account (free of charge, no card required), activate it from your received email, login and then start your TRIAL package with no fees as you can see at our pricing packages. After you have tested the API and/or APP and you are satisfied, you may buy a paid package. You will always see at your Admin Console page the real resources consumption in real time, your invoices, you may see/edit/delete your profile or export log consents as GDPR instructed, you may read our FAQs.

sun up left
sun down left
sun up right
sun down right
centered sun
centered panel
photovoltaic solar panels farm

Sun Position Detection APP

Photo File
Image URL(*)
* Let the "NO" value of Image URL if you upload a Photo File, otherwise write the image url like http://domainname.com/image.jpg



API Endpoint (method POST):
https://www.de-vis-software.ro/solarisupv.aspx
Headers:
Authorization: Basic //Your username:password are base64 encoded string
Content-Type: application/json
Accept: application/json
JSON Request Body (change inputs here and see in real time below):
                   {
  "base64_Photo_String": "iVBORw0KGgoAAAA...base64 encoded string photo...GAAAAAElFTkSuQmCC",
  "photo_url": "NO",
  "boundingBoxCrop": "YES"
}
               
JSON Response From API (change inputs here and see in real time below):
{
  "created": "2020-05-02T12:28:09.989Z",
  "predictions": [
    {
      "probability": 0.64,
      "tagId": "6b333d95-e461-4155-890c-9921158f7d17",
      "tagName": "sun|-30|60",
      "boundingBox": {
        "left": 0.590857267,
        "top": 0.049960345,
        "width": 0.153553188,
        "height": 0.287757039
      },
      "boundingBoxPhoto": "iGgoAAAA..crop base64 encoded string photo...GTkSuQmCC"
    },
    {
      "probability": 0.21,
      "tagId": "6b333d95-e461-4155-890c-9921158f7d17",
      "tagName": "sun|22|68",
      "boundingBox": {
        "left": 0.241624564,
        "top": 0.2652982,
        "width": 0.137271315,
        "height": 0.2830975
      },
      "boundingBoxPhoto": "iNgfdEERA..crop base64 encoded string photo...RmbTrdeCC"
    }
  ],
  "final_photo": "iRRfdewqRA..final base64 encoded string photo with drawn bounding boxes...SwervasCC"
}
JSON Response (Example) From API in case of ERROR:

 [
  {
    "cd": "1001",
    "description": "The authorization header Is either empty Or isn't Basic"
  }
]

Request Parameters Table

Parameter Name
Parameter Description
base64_Photo_String
This is the input photo as base64 encoded string[string] from which will be detected and cropped sun position(s) bounding boxes.
photo_url
This is the image url [string] used for the input photo. Its default value is NO because the above parameter base64_Photo_String is set. If this parameter is set to an image url, base64_Photo_String value must be NO.
boundingBoxCrop
This parameter [string] is used with default value NO meaning you do not need to extract (crop) a base 64 string picture of the sun from the input picture, otherwise set to: YES

Response Parameter Table

Parameter Name
Parameter Description
created  
This is the timestamp as  [string] at the moment that request is made.
final_photo 
This is the final photo base64 encoded string [string] upon which bounding boxes are drawn.
predictions
This is a list or array which contains the parameters explained below.
probability
This is the probability score [real] of the detected sun position.
tagId
This is the tagId [string] for the detected sun position. Example: 6b333d95-e461-4155-890c-9921158f7d17.
tagName
This is the tagName [string] for the detected sun position. It contains also the calculated pan angle and the tilt angle (separated by "|") that the solar panel(s) must be rotated and/or tilted with, related to the center of the panel, in order to have sun in the center of the photo. Example of tagName: sun|-30|60.
boundingBox
This is an object that contains the below explained parameters.
left
This is the upper left coordinate [real] of the rectangular bounding box surrounding the detected sun position.
top
This is the upper top coordinate [real] of the rectangular bounding box surrounding the detected sun position.
width
This is the width [real] of the rectangular bounding box surrounding the detected sun position.
height
This is the height [real] of the rectangular bounding box surrounding the detected sun position.
boundingBoxPhoto
This is the base64 encoded string crop photo [string] based upon bounding box surrounding the detected sun position.

Response Error Codes Table

Parameter Name
Parameter Description
cd

This is the error code which may be:

  • 1001
  • 1002
  • 1003
  • 1004
  • 1005
  • 1006
  • 1007
  • 1008
  • 1009
  • 1010
  • 1011
  • 1012
  • 1013
  • 1014
  • 1015
  • 1016
  • 2001
description

This is the description of the error code which may be:

  • 1001 - The authorization header is either empty or isn't Basic.
  • 1002 - Daily requests number exceeded in TRIAL mode!
  • 1003 - Trial expired!
  • 1004 - Requests number exceeded!
  • 1005 - Package expired!
  • 1006 - No invoice!
  • 1007 - Reader is NULL for TRIAL!
  • 1008 - Cannot Read if TRIAL exists!
  • 1009 - Error connecting to database looking for TRIAL! (and a detailed description message of the encountered error)
  • 1010 - Reader is NULL for Invoice!
  • 1011 - Cannot Read if Invoice exists!
  • 1012 - Error connecting to database! (and a detailed description message of the encountered error)
  • 1013 - Input request too long! Maximum 5 MB per request are allowed / Nothing to upload
  • 1014 - Invalid request data! (and a detailed description message of the encountered error)
  • 2001 - Invalid request data after passing to the API (and a detailed description message of the encountered error)

Source Code Examples for Using Our Sun Position Detection API

                       
Imports System
Imports System.Text
imports System.Collections.Generic
Imports System.Net
Imports Newtonsoft.Json

Public Class sun_position_detection_api
    Public Class ResponseFields
	 Public Property created As String
         Public Property predictions As New List(Of prediction)
         Public Property final_photo As String
    End Class

    Public Class prediction
	 Public Property probability As Single
         Public Property tagId As String
         Public Property tagName As String
         Public Property boundingBox As New boundingbox
         Public Property boundingBoxPhoto As String
    End Class

    Public Class boundingbox
	 Public Property left As Single
         Public Property top As Single
         Public Property width As Single
         Public Property height As Single
    End Class
    
    Public Class ErrorFields
        Public Property cd As String
        Public Property description As String
    End Class

    Protected Sub SendRequest()
        Dim Client As WebClient = New WebClient()
        Dim credentials As String = Convert.ToBase64String(Encoding.ASCII.GetBytes("your_username:your_password"))
        Client.Headers(HttpRequestHeader.Authorization) = String.Format("Basic {0}", credentials)
        Client.Headers(HttpRequestHeader.Accept) = "application/json"
        Client.Headers(HttpRequestHeader.ContentType) = "application/json"
	Client.BaseAddress = "https://www.de-vis-software.ro/solarisupv.aspx"
        Dim resString As String = ""

        Try
            Dim js As String = "Replace this string with your JSON Request Body string like in the example above on the website"
            Dim reqString As Byte() = Encoding.UTF8.GetBytes(js)
            Dim url As Uri = New Uri(Client.BaseAddress)
            Dim resByte As Byte() = Client.UploadData(url, "post", reqString)
            resString = Encoding.UTF8.GetString(resByte)

	    If resString.IndexOf("predictions") > 0 Then
                Dim r As ResponseFields = New ResponseFields()
                r = JsonConvert.DeserializeObject(Of ResponseFields)(resString)
                Console.Write(resString)
            Else
		Dim e As list(of ErrorFields) = New list(of ErrorFields)
		e = JsonConvert.DeserializeObject(Of list(of ErrorFields))(resString)
                Console.Write(e(0).cd)
                Console.Write(e(0).description)
            End If

            Client.Dispose()
        Catch exception As Exception
            Dim ex As System.Exception = exception
            Console.Write("ERROR: " & resString & ex.Message)
        End Try
    End Sub

    Public Shared Sub Main()
	Dim b As sun_position_detection_api = New  sun_position_detection_api
        b.SendRequest()
    End Sub
End Class



solarisupv Online Video Presentation

Sun Position Detection API, SolarisUPV is in the video presentation below. There are several search terms which you may use like: Sun Position Detection sdk, Sun Position Detection c#, Sun Position Detection online, automatic Sun Position Detection, Sun Position recognition python, real time Sun Position Detection python, image processing of the sun on the sky.

 



Pricing Packages

Please choose one of the below pricing packages for start using our Sun Position Detection API and online APP!

Start TRIAL
No catches

  • 7 days TRIAL
  • Use our cloud REST API and online APP
  • Maximum 50 requests per DAY in trial period
  • You do NOT own the commercial copyright for using the API in your apps in trial period.
  • Get pan angle and tilt angle that the solar panel must be rotated/tilted with.
  • Get bounding boxes vertices for the sun detected.
  • Get crop pictures of sun bounding boxes for each photo
  • Get confidence score for bounding boxes
  • Unlimited Devices
  • Administration console
  • Support through online chat and/or tickets
  • We do NOT allow spam accounts for TRIAL



Monthly TIER
Popular

  • 80 USD per month
  • Use our cloud REST API and online APP
  • Maximum 10000 predictions(*) per month
  • Maximum 50 requests per MINUTE
  • You own the commercial copyright to use it in your apps.
  • Get pan angle and tilt angle that the solar panel must be rotated/tilted with.
  • Get bounding boxes vertices for the sun detected.
  • Get crop pictures of sun bounding boxes for each photo
  • Get confidence score for bounding boxes
  • Unlimited Devices
  • Administration console
  • Premium support through online chat and/or tickets, very supportive help and quick responses.



Yearly TIER
(15% Discount)

  • 816 USD per year
  • Use our cloud REST API and online APP
  • Maximum 10000 predictions(*) per month
  • Maximum 50 requests per MINUTE
  • You own the commercial copyright to use it in your apps.
  • Get pan angle and tilt angle that the solar panel must be rotated/tilted with.
  • Get bounding boxes vertices for the sun detected.
  • Get crop pictures of sun bounding boxes for each photo
  • Get confidence score for bounding boxes
  • Unlimited Devices
  • Administration console
  • Premium support through online chat and/or tickets, very supportive help and quick responses.



Note: VAT rate may be added or not, function to your country and/or if you are a taxable person or company.
* Prediction - on the input photo may exist many predictions, each of it with certain amount of probability of detected sun position(s). Even we filter the output predictions to those with probability score greater than 20%, for the input photo all predictions are counted.